2011-04-03 11 views
87

Soy muy nuevo en git y he estado tratando de entender por qué git sigue mostrando todo lo que cambié en una rama de otra rama cuando ejecuto git checkout para cambiar de rama. Primero intenté no usar git add y no lo hice trabajo. Sin embargo, intenté usar git add, pero no solucioné el problema. No estoy usando git commit todavía.¿Por qué git sigue mostrando mis cambios cuando cambio de ramas (archivos modificados, agregados, eliminados) sin importar si ejecuto git add o no?

Esto es básicamente lo que estoy haciendo:

$ git clone <a_repository> 
$ git branch 
* master 
$ git branch testing 
$ git checkout testing 
...edit a file, add a new one, delete... 
$ git status 
    # On branch testing 
    # Changed but not updated: 
    # (use "git add/rm <file>..." to update what will be committed) 
    # (use "git checkout -- <file>..." to discard changes in working directory) 
    # 
    #  deleted: file1.txt 
    # 
    # Untracked files: 
    # (use "git add <file>..." to include in what will be committed) 
    # 
    #  file2.txt 
no changes added to commit (use "git add" and/or "git commit -a") 
$ git branch 
    master 
* testing 
$ git checkout master 
D  file1.txt 
Switched to branch 'master' 
$ git status 
    # On branch master 
    # Changed but not updated: 
    # (use "git add/rm <file>..." to update what will be committed) 
    # (use "git checkout -- <file>..." to discard changes in working directory) 
    # 
    #  deleted: file1.txt 
    # 
    # Untracked files: 
    # (use "git add <file>..." to include in what will be committed) 
    # 
    #  file2.txt 
no changes added to commit (use "git add" and/or "git commit -a") 

pensé que, si bien la utilización de saltos, lo que hace en una rama, que es invisible a todas las otras ramas. ¿No es esa la razón de crear ramas?

He intentado usar "git add" pero los cambios son visibles en ambas ramas. ¿Debo ejecutar "git commit" antes de cambiar de rama para evitar esto?

Respuesta

99

La conmutación de las ramas conlleva cambios no confirmados. Primero confirme, ejecute git checkout . para deshacerlos, o ejecute git stash antes de cambiar. (Puede obtener sus cambios de vuelta con git stash apply)

+0

Gracias por responder. Intenté usar git stash/git stash, pero el nuevo archivo aún está visible cuando cambio de rama. – JPZ

+7

git stash pop es mejor a menos que quiera construir una gran cantidad de stashes. – siride

+4

@JPZ: git stash solo se ocupa de los archivos rastreados; los nuevos archivos no son rastreados, por lo que no serán escondidos. – siride

23

Respuesta corta: sí, debe confirmar. ¡Asegúrate de hacerlo en la rama derecha, sin embargo!

Una rama es un puntero a una confirmación. Cuando se compromete con una rama desprotegida, la sucursal avanza para señalar esa nueva confirmación. Cuando revisa una sucursal, está revisando la confirmación a la que apunta. (Puede pensar en confirmaciones como instantáneas de su árbol de trabajo.)

Por lo tanto, si tiene cambios que no ha confirmado, no se verán afectados por el cambio de las ramas. Por supuesto, si cambiar de rama es incompatible con sus cambios, git checkout simplemente se negará a hacerlo.

git add es un comando para realizar cambios de etapas, que luego se confirmarán. No registra esos cambios en el historial del repositorio. Simplemente los coloca en un área de ensayo (el índice); git commit luego usa los contenidos de esa área de preparación para crear confirmaciones.

Cuestiones relacionadas