Considere lo siguiente "historia":¿Cómo se actualiza el directorio de trabajo en "git checkout"?
$ mkdir my_project
$ cd my_project
$ git init
Initialized empty Git repository in /home/misha/misha/my_project/.git/
$ echo "first line" > hello.txt
$ git add hello.txt
$ git commit -m "first commit"
[master (root-commit) 9c913a1] first commit
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 hello.txt
$ git branch new_feature
$ git checkout new_feature
Switched to branch 'new_feature'
$ echo "second line" >> hello.txt
$ cat hello.txt
first line
second line
$ git checkout master
M hello.txt
Switched to branch 'master'
$ cat hello.txt
first line
second line
Por qué hello.txt
tiene dos líneas en la rama principal ? (Pensé que git checkout
revertiría el directorio de trabajo al estado anterior, es decir, hello.txt
tendrá solo una línea.)
¿Qué sucede realmente detrás de las escenas del directorio de trabajo en git checkout
? ¿Cómo se actualiza?
Aparentemente, git combina de manera predeterminada el directorio de trabajo actual en la nueva rama (_master_ en mi caso): http://www.gitguys.com/topics/switching-branches-without-committing –
Mismo comportamiento si el archivo fue agregado a el índice pero no comprometido –
Creo que las sucursales solo almacenan confirmaciones, no cambios de trabajo. Cuando te cambias a una sucursal y trabajas, debes confirmar esos cambios antes de cambiar a una rama diferente, o esos cambios no se asociarán a esa rama. Otra forma de manejar las sucursales es clonar su repositorio en un nuevo directorio. Luego puede trabajar en las dos ramas en los dos directorios diferentes sin tener que comprometerse hasta que esté listo. Esto hace que sea más fácil evitar errores. –