Co jest checkout
w git?
Wiem, że kiedy zrobisz coś checkout
dla określonej gałęzi, HEAD
wskazuje na tę gałąź. Ale co to naprawdę oznacza? Czy to oznacza, że mogę wtedy pracować w tej gałęzi? Jeśli tak, to bez sprawdzenia oddziału nie mogę nad nim pracować?
Co to remote checkout
znaczy? Jak to jest przydatne?
git
git-checkout
daehaai
źródło
źródło
Odpowiedzi:
Jak zauważyłeś,
HEAD
jest to etykieta wskazująca, gdzie jesteś w drzewie zatwierdzeń. Porusza się wraz z tobą, gdy przechodzisz od jednego zatwierdzenia do drugiego.git checkout <commit>
to podstawowy mechanizm poruszania się po drzewie zatwierdzeń, przenoszący fokus (HEAD
) do określonego zatwierdzenia.Commit może być określony przez jeden z wielu sposobów, popełnić hash, nazwę oddziału, nazwę znacznika, względna (składnię
HEAD^
,HEAD~1
itd) i tak dalej. Często przydatne jest rozważenie, że wyewidencjonowanie jest zmianą gałęzi i istnieją pewne opcje, które działają z tej perspektywy, ale wszystkie odnoszą się do zatwierdzeń.Do kasy, zatwierdzenie ma wpływ z innej strony niż poruszanie
HEAD
się.-b
opcją nowa gałąź zostanie utworzona na podstawie bieżącego zatwierdzenia, a następnie uaktywniona.--track
opcji wyewidencjonowana gałąź może zostać powiadomiona o zdalnym oddziale--orphan
opcją tworzony jest nowy oddział (jak z-b
), ale nie będzie oparty na żadnym istniejącym zatwierdzeniu.Jest jeszcze kilka opcji, o których możesz przeczytać na stronie podręcznika git checkout , z których wszystkie obracają się wokół przechodzenia od jednego zatwierdzenia do drugiego - różnią się tylko efektem, jaki ma ten ruch oprócz przenoszenia
HEAD
.źródło
git checkout <commit> <path>
nie zmienia gałęzi.git checkout <path>
.Pozwólcie, że wyjaśnię niektóre przypadki użycia wyewidencjonowania z plikiem, folderem i gałęziami, aby pomóc w zrozumieniu.
Powiedzmy, że mamy folder o nazwie,
dev
aindex.html
także wszystko jest śledzone, a katalog roboczy jest czysty.Jeśli przypadkowo zmienię nazwę pliku
index.html
i chcę cofnąć, że po prostugit checkout index.html
go użyję, odzyska stan pliku z aktualnie wybranej gałęzi repozytorium.Teraz, jeśli zrobiłem jakąś zmianę w
dev
folderze i chcę to odzyskać. Mogę użyć,git checkout dev
ale co, jeśli istnieje już gałąź o nazwiedev
zamiast sprawdzania tego folderu, ściągnie tę gałąź. Aby tego uniknąć, wolałbym zrobićgit checkout -- dev
.Teraz pusty podwójny myślnik oznacza bieżącą gałąź i pyta gita o folder
dev
z aktualnie wybranej gałęzi.Podobnie jeśli
git checkout alpha dev
to zrobię, ściągnę folder dev z gałęzi alpha.Ta odpowiedź dotyczy twojego pierwszego pytania „git checkout naprawdę znaczy”.
źródło
„Do wyewidencjonowania” oznacza, że pobierasz dowolne zatwierdzenie z repozytorium i odtwarzasz stan skojarzonego drzewa plików i katalogów w katalogu roboczym.
Kiedy sprawdzasz commit, który nie jest odgałęzieniem (np.
git checkout HEAD~2
), Jesteś na tak zwanej odłączonej głowie. Możesz tutaj tworzyć zatwierdzenia, ale kiedy przełączysz się na inną gałąź, zatwierdzenia te nie będą możliwe do odzyskania przez nazwę gałęzi i mogą nawet zostać usunięte przez garbage collectora po pewnym czasie.źródło