Poner cambios no confirmados en Master a una nueva sucursal por Git


Respuestas:


151

Simplemente puede pagar en la rama de prueba y luego confirmar. No pierde sus cambios no comprometidos cuando se muda a otra rama.

Supongamos que estás en la rama maestra:

git checkout test
git add .
git add deletedFile1
git add deletedFile2
...
git commit -m "My Custom Message"

No estoy realmente seguro acerca de los archivos eliminados, pero supongo que no se incluyen cuando usas git add .


12
A veces, el pago fallará porque sus cambios entran en conflicto con esa rama. Puede intentar pagar -m para fusionar.
Jouni K. Seppänen

2
Intenté esto pero recibí un error: error: sus cambios locales en los siguientes archivos se sobrescribirán al finalizar la compra. Por favor, confirme sus cambios o guárdelos antes de poder cambiar de rama.
ishwr

Si bien esto funcionará, la respuesta que dice use stash debería ser preferible, IMO. Tal vez solo sea una elección personal, pero es un flujo de trabajo más limpio, lógicamente e introduce STASH, que es un comando útil.
Patrick

Falta la opción "-b", ya que el título sugiere que la pregunta se refiere a una "nueva" rama.
Guntram

195

También puede crear una nueva rama y cambiar a ella haciendo:

git checkout -b new_branch
git add .

Lo uso todo el tiempo porque siempre me olvido de comenzar una nueva rama antes de comenzar a editar el código.


3
El mismo problema que @jouni señaló para la otra respuesta: puede tener dificultades para fusionar la rama de nuevo en maestro si los cambios adicionales entran en conflicto con los cambios originales. OMI este hilo responde mejor a la pregunta: stackoverflow.com/questions/556923/…
jpw

Corto, dulce y tranquilizador ... "Lo uso todo el tiempo ..."
17οδεMεδιϲ

1
No olvide hacer commit en new_branch. Si vuelve a cambiar a la rama maestra y revierte los archivos modificados, también los perderá en new_branch.
petrsyn

36

¿Por qué no solo usar git stash? Creo que es más intuitivo como copiar y pegar.

$ git branch
  develop
* master
  feature1
  TEST
$

Tiene algunos archivos en su rama actual que desea mover.

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#      modified:   awesome.py
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#      modified:   linez.py
#
$
$ git stash
Saved working directory and index state \
  "WIP on master: 934beef added the index file"
HEAD is now at 934beef added the index file
(To restore them type "git stash apply")
$
$ git status
# On branch master
nothing to commit (working directory clean)
$
$
$ git stash list
stash@{0}: WIP on master: 934beef ...great changes
$

Mover a la otra rama.

$ git checkout TEST

Y aplicar

$ git stash apply
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#      modified:   awesome.py
#      modified:   linez.py
#

También me gusta git stashporque lo uso git flow, que se queja cuando quieres terminar una rama de características mientras todavía hay cambios en tu directorio de trabajo.

Al igual que @Mike Bethany, esto me sucede todo el tiempo porque trabajo en un nuevo problema mientras olvido que todavía estoy en otra sucursal. Para que pueda esconder su trabajo git flow feature finish..., y git stash applya una nueva git flow feature start ...sucursal.


2
git stashes mi forma preferida de lidiar con cambios no comprometidos. Sin duda, es un método intuitivo cuando lo piensas como cortar y pegar.
Matthew Mitchell

Este parece un buen enfoque para mí. Funcionó sin problemas.
Yunus Nedim Mehel

No sabía que podía hacer esto y funcionó muy bien. Se siente un poco más intuitivo que los otros métodos.
glaucon

Creo que esconder es una forma más profesional, en lugar de usar git checkout y luego agregar. Creo que tu respuesta debería ser más de 100 votos.
Matrosov Alexander

1
@ Καrτhικgit stash --include-untracked
2Toad

5
git checkout TEST
git add file1 file2
git commit
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.