2011-07-01 10 views
5

Pensé que ya tenía una comprensión decente de Git, pero en este momento me he sorprendido. Pensé que las sucursales aislarían los cambios de otras ramas, así que comencé una gran refactorización experimental en una nueva rama. Esta refactorización implicó mover muchos archivos. ¡Cuando cambié a maestro todavía podía ver los cambios!Git: las ramas deben aislar los cambios, ¿o no?

Fui a mi repositorio caja de arena para reproducir el problema:

$ git branch crazy-refactoring 
$ git checkout crazy-refactoring 
$ rm README 
$ git checkout master 
$ git status 
# On branch master 
# Changes not staged for commit: 
# (use "git add/rm <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  deleted: README 
# 
no changes added to commit (use "git add" and/or "git commit -a") 
$ ls README 
ls: cannot access README: No such file or directory 

¿Por qué? Lo importante de mí al crear una sucursal, era que podía probar algo y tirarlo si no lo conseguía. ¿Toughts?

+3

No ha confirmado la eliminación. Solo los cambios comprometidos están "aislados". –

+1

Tienes razón, después de cometer README, en la rama de refactorización loca, reapareció en la rama principal. Tal vez me esté perdiendo algo, pero me parece un comportamiento extraño e indeseable. – stivlo

+0

al principio también me lanzó, pero ahora confío en el comportamiento todo el tiempo cuando hago un montón de cambios en una rama y decido que preferiría tirarla en una rama separada para más adelante. – butter71

Respuesta

6

No ha confirmado la eliminación. Solo los cambios comprometidos están "aislados".

En cuanto a su comentario:

Tal vez me falta algo, pero me parece un comportamiento extraño e indeseable.

Piense en esto:

que eliminó README en crazy-refactoring pero no confirma el cambio. Git sabe que cambiaste el archivo y que no lo cometiste. Con el fin de preservar sus cambios, no los anula si selecciona otra rama.
De lo contrario, no habría manera de que Git supiera cuáles fueron los cambios al volver a la bifurcación en la que realizó los cambios. Se perderían, y eso es mucho peor que ver los cambios en la otra rama.

Su directorio de trabajo actual siempre es la rama actual + cambios no confirmados (a menos que los restablezca).

Por supuesto, Git podría advertirle al verificar la otra rama, que no ha confirmado los cambios, pero a veces se desea mantener los cambios y cambiar a otra rama.

+1

Gracias también por la explicación adicional, más como butter71 dijo que podría ser útil también. – stivlo

Cuestiones relacionadas