Comencé a trabajar en una nueva característica y después de codificar un poco, decidí que esta característica debería estar en su propia rama.
¿Cómo muevo los cambios no confirmados existentes a una nueva sucursal y restablezco la actual?
Quiero restablecer mi rama actual mientras preserva el trabajo existente en la nueva función.
git
git-branch
git-stash
git-reset
Dane O'Connor
fuente
fuente
Respuestas:
Use lo siguiente:
Esto dejará su rama actual tal como está, creará y pagará una nueva rama y conservará todos sus cambios. Luego puede organizar los cambios en los archivos para confirmar:
y comprométete con tu nueva sucursal con:
Los cambios en el directorio de trabajo y los cambios en el índice todavía no pertenecen a ninguna rama . Esto cambia la rama donde terminarían esas modificaciones.
No restablece su rama original, se queda como está. La última confirmación
<old-branch>
seguirá siendo la misma. Por lo tanto ustedcheckout -b
y luego se comprometen.Actualización 2020 / Git 2.23
Git 2.23 agrega el nuevo
switch
subcomando en un intento de despejar algo de la confusión que proviene del uso sobrecargado decheckout
(cambiar ramas, restaurar archivos, desconectar HEAD, etc.)Comenzando con esta versión de Git, reemplace el comando anterior con:
El comportamiento es idéntico y permanece sin cambios.
fuente
git checkout -b <new branch>
cambios donde esos cambios terminarían.git checkout .
/git reset --hard
será irrecuperable eliminar ellasAlternativamente:
Guardar los cambios actuales en una reserva temporal:
$ git stash
Cree una nueva rama basada en este alijo y cambie a la nueva rama:
$ git stash branch <new-branch> stash@{0}
Consejo: use la tecla de tabulación para reducir la escritura del nombre del alijo.
fuente
git stash apply
.git checkout -b <new branch name>
git add -A
antes de esconderse.Si ha estado realizando confirmaciones en su rama principal mientras codificaba, pero ahora desea mover esas confirmaciones a una rama diferente, esta es una forma rápida:
Copie su historial actual en una nueva sucursal, trayendo también los cambios no confirmados:
Ahora fuerce la rama original "desordenada" para que retroceda: (sin cambiar a ella)
Por ejemplo:
o si hubieras hecho 4 confirmaciones:
Advertencia:
git branch -f master origin/master
se restablezca el seguimiento de la información obtenida de dicha rama. Por lo tanto, si ha configurado sumaster
rama para empujar a otro lugar que no seaorigin/master
esa configuración se perderá.Advertencia: también existe el peligro de cambiar la base después de la ramificación, que se describe aquí . La única forma de evitar eso es crear una nueva historia usando cherry-pick. Ese enlace describe el método más seguro a toda prueba . Si tiene cambios no confirmados, es posible que desee al
git stash
principio ygit stash pop
al final.fuente
El escenario común es el siguiente: olvidé crear la nueva rama para la nueva característica, y estaba haciendo todo el trabajo en la rama de la característica anterior. He comprometido todo el trabajo "antiguo" a la rama maestra, y quiero que mi nueva rama crezca a partir de la "maestra". No he hecho un solo compromiso de mi nuevo trabajo. Aquí está la estructura de la rama: "master" -> "Old_feature"
fuente
Si lo confirma, también podría seleccionar el ID de confirmación individual. Hago esto a menudo cuando comienzo a trabajar en master, y luego quiero crear una sucursal local antes de subir a mi origen /.
Hay muchas cosas que puede hacer con cherry-pick, como se describe aquí , pero este podría ser un caso de uso para usted.
fuente
En realidad, hay una manera realmente fácil de hacer esto con GitHub Desktop ahora que no creo que haya sido una característica antes.
Todo lo que necesita hacer es cambiar a la nueva rama en GitHub Desktop, y le pedirá que deje sus cambios en la rama actual (que se guardará), o que traiga sus cambios a la nueva rama. Simplemente elija la segunda opción, para llevar los cambios a la nueva sucursal. Luego puede comprometerse como de costumbre.
fuente
Esto puede ser útil para todos los que usan herramientas para GIT
Mando
Cambiar rama: moverá sus cambios a nueva rama. Entonces puedes cometer cambios.
TortoiseGIT
Haga clic derecho en su repositorio y luego use TortoiseGit-> Switch / Checkout
SourceTree
Use el botón "Pagar" para cambiar de rama. Verá el botón "pagar" en la parte superior después de hacer clic en una rama. Los cambios desde la rama actual se aplicarán automáticamente. Entonces puedes cometerlos.
fuente
Solía @Robin respuesta y una lista de todo lo que hice,
! Si el repositorio tiene más de un alijo, vea cuál aplicar a la nueva rama:
e inspeccionar el alijo individual por,
O inspeccione todos los escondites a la vez:
fuente