remota - Los archivos modificados en una rama git se están extendiendo a otra rama
git push example (5)
Estoy trabajando en un repositorio git con una rama principal y otra rama temática. He cambiado a la rama de tema y he modificado un archivo. Ahora, si cambio a la rama maestra ese mismo archivo se muestra como modificado.
Por ejemplo:
estado de git en la rama de git-build:
# On branch git-build
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: cvsup_current
#
Cambiar a la rama principal
[root@redbull builder_scripts (git-build)]# git co master
M builder_scripts/cvsup_current
Switched to branch "master"
estado de git en la rama principal
[root@redbull builder_scripts (master)]# git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: cvsup_current
#
¿Por qué el archivo se muestra como modificado en la rama principal a pesar de que se modificó en la rama git-build?
Según entiendo, las ramas son independientes entre sí y cuando cambio de una rama a otra, los cambios no se "expanden" de una rama a otra. Así que obviamente me falta algo aquí.
Alguien tiene una pista de palo?
Este es el comportamiento predeterminado de git.
Puede usar la opción -f para finalizar la compra y hacer una "comprobación limpia" si lo desea.
Los archivos modificados no se colocan en el repositorio hasta que los agregue y los comprometa. Si vuelve a la rama de tema y confirma el archivo, no aparecerá en la rama principal.
Si desea almacenar temporalmente sus cambios en una rama mientras se va a trabajar en otra, puede usar el comando git stash
. Es una de las increíbles ventajas poco conocidas de usar git. Flujo de trabajo de ejemplo
git stash #work saved
git checkout master
#edit files
git commit
git checkout git-build
git stash apply #restore earlier work
git stash
almacena una pila de cambios, por lo que puede almacenar con seguridad varios puntos de control. También puede darles nombres / descripciones. Información de uso completo aquí .
¿Por qué el archivo se muestra como modificado en la rama principal a pesar de que se modificó en la rama git-build?
La clave para recordar es que el archivo no se modificó en la rama git-build. Solo fue modificado en tu copia de trabajo.
Solo cuando se compromete, los cambios se vuelven a colocar en la rama que haya prestado.
- No es que las ramas de git dependan unas de otras, pero tampoco tienen una base de código completa por separado para cada rama.
- Para cada confirmación, Git almacena un objeto que contiene un puntero a los cambios. Por lo tanto, cada rama apunta a su última confirmación y apunta a la rama en la que se encuentra actualmente.
- Cuando cambias la rama, el puntero HEAD apunta a esa confirmación particular de la rama. Entonces, si hay archivos modificados, el comportamiento predeterminado es copiarlos.
Puede hacer lo siguiente para superar este problema.
- Utilice la opción
-f
para ignorar los cambios.
Si desea guardar los cambios:
- Confirme los cambios localmente en la misma rama y luego cambie la rama.
- Use
git stash
, cambie la rama, haga su trabajo, vuelva a la rama original ygit stash apply
.