Rozważmy następujący "historię":W jaki sposób katalog roboczy jest aktualizowany w "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
Dlaczego hello.txt
ma dwie linie na oddział mistrza? (Myślałem, że git checkout
przywróci katalog roboczy do poprzedniego stanu, tj. hello.txt
będzie miał tylko jedną linię.)
Co tak naprawdę dzieje się za kulisami w katalogu roboczym pod numerem git checkout
? Jak jest aktualizowany?
Wygląda na to, że git domyślnie łączy bieżący katalog roboczy z nowym odgałęzieniem (_master_ w moim przypadku): http://www.gitguys.com/topics/switching-branches- bez -zakresu: –
To samo zachowanie, jeśli plik został dodany do indeks, ale nie został zatwierdzony. –
Myślę, że oddziały przechowują tylko zatwierdzenia, a nie zmiany. Po przełączeniu do gałęzi i wykonaniu pracy, musisz zatwierdzić te zmiany przed przejściem do innej gałęzi, lub te zmiany nie będą powiązane z tą gałęzią. Innym sposobem obsługi gałęzi jest sklonowanie repozytorium do nowego katalogu. Następnie możesz pracować na dwóch gałęziach w dwóch różnych katalogach bez konieczności zatwierdzania, dopóki nie będziesz gotowy. Ułatwia to unikanie błędów. –