remove - Cómo confirmar mis cambios actuales en una rama diferente en git
git push tag (3)
Esta pregunta ya tiene una respuesta aquí:
A veces sucede que realizo algunos cambios en mi directorio de trabajo y me doy cuenta de que estos cambios deben realizarse en una rama diferente a la actual. Esto generalmente ocurre cuando quiero probar cosas nuevas o hacer algunas pruebas y me olvido de crear una nueva rama de antemano, pero no quiero cometer código sucio en la rama maestra.
Entonces, ¿cómo puedo hacer que los cambios no confirmados (o los cambios almacenados en el índice) se confirmen en una rama diferente a la actual?
-
git checkout my_other_branch
-
git add my_file my_other_file
-
git commit -m
Y proporcione su mensaje de confirmación.
Solo puedes crear una nueva rama y cambiarla. Confíe sus cambios entonces:
git branch dirty
git checkout dirty
// And your commit follows ...
Alternativamente, también puede retirar una sucursal existente (solo git checkout <name>
). Pero solo si no hay colisiones (la base de todos los archivos editados es la misma que en su rama actual). De lo contrario, recibirá un mensaje.
Las otras respuestas que sugieren revisar la otra rama y luego comprometerse con ella, solo funcionan si es posible el pago dadas las modificaciones locales. Si no es así, estás en el caso de uso más común de git stash
:
git stash
git checkout other-branch
git stash pop
El primer stash
oculta los cambios (básicamente, realiza una confirmación temporal), y el stash pop
al lado posterior stash pop
vuelve a aplicar. Esto le permite a git usar sus capacidades de combinación.
Si cuando intenta abrir el alijo, se encuentra con conflictos de combinación ... los siguientes pasos dependen de cuáles son esos conflictos. Si todos los cambios ocultos pertenecen realmente a esa otra rama, simplemente tendrá que ordenarlos, es una consecuencia de haber realizado los cambios en la rama incorrecta.
Por otro lado, si realmente lo ha estropeado y su árbol de trabajo tiene una mezcla de cambios para las dos ramas, y los conflictos son solo en los que desea confirmar en la rama original, puede ahorrar algo de trabajo . Como de costumbre, hay muchas maneras de hacer esto. Aquí hay uno, comenzando desde después de que aparezca y vea los conflictos:
# Unstage everything (warning: this leaves files with conflicts in your tree)
git reset
# Add the things you *do* want to commit here
git add -p # or maybe git add -i
git commit
# The stash still exists; pop only throws it away if it applied cleanly
git checkout original-branch
git stash pop
# Add the changes meant for this branch
git add -p
git commit
# And throw away the rest
git reset --hard
Alternativamente, si se da cuenta antes de que esto suceda, simplemente confirme las cosas que pertenecen a la rama actual. Siempre puedes volver y modificar ese compromiso:
git add -p
git commit
git stash
git checkout other-branch
git stash pop
Y, por supuesto, recuerde que todo esto tomó un poco de trabajo, y evítelo la próxima vez, quizás al poner el nombre de su sucursal actual en su indicador agregando $(__git_ps1)
a su PS1 en su bashrc. (Ver, por ejemplo, el Git en documentos Bash .)