git checkout
Ta strona jest poświęcona poleceniu git checkout
. Zawiera ona omówienie przykładów użycia i przypadków brzegowych. W terminologii Git wyewidencjonowanie (checkout) oznacza czynność przełączania między różnymi wersjami obiektu docelowego. Polecenie git checkout
działa na trzech odrębnych typach obiektów: plikach, commitach i gałęziach. Niezależnie od definicji terminu„checkout” pojęcie „wyewidencjonowania” powszechnie stosuje się do określania czynności wykonania polecenia git checkout
. W temacie Cofanie zmian omówiliśmy sposób użycia polecenia git checkout
do wyświetlania starych commitów. Większa część niniejszego dokumentu będzie dotyczyła operacji wyewidencjonowania wykonywanych na gałęziach.
Wyewidencjonowanie gałęzi jest podobne do wyewidencjonowania starych commitów oraz plików w tym sensie, że katalog roboczy zostaje zaktualizowany zgodnie z wybraną gałęzią/rewizją, jednak nowe zmiany są zapisywane w historii projektu, co oznacza, że nie jest to operacja tylko do odczytu.
Wyewidencjonowanie gałęzi
Polecenie git checkout
umożliwia poruszanie się między gałęziami utworzonymi za pomocą polecenia git branch
. Wyewidencjonowanie gałęzi powoduje zaktualizowanie plików w katalogu roboczym zgodnie z wersją zapisaną w danej gałęzi i przekazanie do systemu Git polecenia zarejestrowania wszystkich nowych commitów w tej gałęzi. Można o tym myśleć, jak o sposobie wybierania linii prac programistycznych, nad którą pracujesz.
Dedykowana gałąź dla każdej nowej funkcji to ogromny postęp w porównaniu z tradycyjnym przepływem pracy SVN. Niesamowicie ułatwia wypróbowywanie nowych eksperymentów bez obawy o uszkodzenie dotychczasowej funkcji i umożliwia równoczesną pracę nad wieloma niepowiązanymi funkcjami. Ponadto gałęzie umożliwiają zastosowanie kilku przepływów prac opartych na współpracy.
Polecenie git checkout
bywa czasami mylone z poleceniem git clone
. Różnica między tymi dwoma poleceniami polega na tym, że polecenie „clone” powoduje pobranie kodu ze zdalnego repozytorium, natomiast polecenie „checkout” pozwala przechodzić między różnymi wersjami kodu, które znajdują się już w systemie lokalnym.
materiały pokrewne
Zaawansowany dziennik Git
POZNAJ ROZWIĄZANIE
Poznaj środowisko Git z rozwiązaniem Bitbucket Cloud
Korzystanie: istniejące gałęzie
Zakładając, że repozytorium, w którym pracujesz, zawiera już istniejące gałęzie, za pomocą polecenia git checkout
możesz przełączać się między tymi gałęziami. Aby sprawdzić dostępne gałęzie oraz nazwę bieżącej gałęzi, wykonaj polecenie git branch
.
$> git branch
main
another_branch
feature_inprogress_branch
$> git checkout feature_inprogress_branch
W powyższym przykładzie zaprezentowano, w jaki sposób wyświetlić listę dostępnych gałęzi poprzez wykonanie polecenia git branch
, a następnie przełączyć się na wskazaną gałąź, w tym przypadku feature_inprogress_branch
.
Nowe gałęzie
Polecenie git checkout
współpracuje ściśle z poleceniem git branch. Za pomocą polecenia git branch
można utworzyć nową gałąź. Aby rozpocząć pracę nad nową funkcją, tworzysz nową gałąź odchodzącą od gałęzi głównej
, używając polecenia git branch new_branch
. Po utworzeniu możesz przełączyć się na tę gałąź za pomocą polecenia git checkout new_branch
. Ponadto polecenie git checkout
przyjmuje argument -b
, który stanowi udogodnienie, pozwalając utworzyć nową gałąź i od razu przełączyć się na nią. Możesz pracować nad wieloma funkcjami w pojedynczym repozytorium, przełączając się między nimi za pomocą polecenia git checkout
.
git checkout -b <new-branch>
Powyższy przykład powoduje jednoczesne utworzenie i wyewidencjonowanie nowej gałęzi <new-branch>
. Opcja -b
jest flagą dostępną dla wygody, która nakazuje systemowi Git wykonanie polecenia git branch
przed wykonaniem polecenia git checkout
.
git checkout -b <new-branch> <existing-branch>
Domyślnie polecenie git checkout -b
spowoduje utworzenie gałęzi new-branch
odchodzącej w miejscu bieżącego wskaźnika HEAD
. Do polecenia git checkout
można przekazać opcjonalny parametr dodatkowej gałęzi. W powyższym przykładzie przekazano parametr <
existing-branch>
, co spowodowało utworzenie gałęzi new-branch
odchodzącej od gałęzi existing-branch
, zamiast w miejscu bieżącej referencji HEAD
.
Przełączanie gałęzi
Przełączanie gałęzi jest proste. Wykonanie poniższego polecenia spowoduje, że wskaźnik HEAD
będzie wskazywał na końcówkę gałęzi
.
git checkout <branchname>
Git śledzi historię operacji wyewidencjonowania w dzienniku reflog. Historię można wyświetlić za pomocą polecenia git reflog
.
Polecenie „git checkout” w odniesieniu do gałęzi zdalnej
Podczas współpracy z zespołem często wykorzystuje się repozytoria zdalne. Te repozytoria mogą być hostowane i udostępniane lub mogą być kopią lokalną innego współpracownika. Każde repozytorium zdalne będzie zawierało własny zestaw gałęzi. Aby wykonać operację wyewidencjonowania na gałęzi zdalnej, najpierw należy pobrać zawartość gałęzi.
git fetch --all
W nowszych wersjach systemu Git można następnie wyewidencjonować gałąź zdalną tak samo jak gałąź lokalną.
git checkout <remotebranch>
Starsze wersje systemu Git wymagają utworzenia nowej gałęzi w oparciu gałąź remote
.
git checkout -b <remotebranch> origin/<remotebranch>
Dodatkowo można wyewidencjonować nową gałąź lokalną i zresetować ją do ostatniego commita gałęzi zdalnych.
git checkout -b <branchname>
git reset --hard origin/<branchname>
Odłączone wskaźniki HEAD
Teraz, gdy poznaliśmy już trzy najważniejsze zastosowania polecenia git checkout
w odniesieniu do gałęzi, ważne jest, aby omówić stan odłączonego wskaźnika — „detached HEAD”
. Należy pamiętać, że wskaźnik HEAD
jest sposobem odwoływania się do bieżącej migawki stosowanym w systemie Git. Wewnętrznie polecenie git checkout
po prostu aktualizuje wskaźnik HEAD
tak, aby wskazywał on określoną gałąź lub określony commit. Gdy wskazuje gałąź, system Git nie zgłasza żadnych problemów. Jednak w przypadku próby wyewidencjonowania commita, przełącza się w stan „detached HEAD”
.
Jest to ostrzeżenie informujące, że wszystko, co robisz, jest „odłączone” od reszty prac programistycznych w ramach projektu. Jeśli zaczniesz pracować nad funkcją, gdy wskaźnik HEAD
znajduje się w stanie odłączonym, nie będzie żadnej gałęzi, która pozwoliłaby do niej wrócić. Jeśli ostatecznie wyewidencjonujesz inną gałąź (np. w celu scalenia z nią swojej funkcji), nie będzie możliwości odwołania się do Twojej funkcji:
Chodzi o to, że prace programistyczne powinny być zawsze prowadzone w gałęzi, a nigdy przy odłączonym wskaźniku HEAD
. Dzięki temu masz pewność, że zawsze masz referencję do swoich nowych commitów. Jeśli jednak tylko przeglądasz stary commit, stan odłączenia wskaźnika HEAD
nie ma tak naprawdę znaczenia.
Podsumowanie
Na tej stronie omówiono przede wszystkim użycie polecenia git checkout
do zmiany gałęzi. Podsumowując, polecenie git checkout
w odniesieniu do gałęzi zmienia element docelowy odniesienia HEAD
. Można je wykorzystać do tworzenia gałęzi, przełączania między gałęziami i wyewidencjonowywania zdalnych gałęzi. Polecenie git checkout
jest podstawowym narzędziem używanym standardowo podczas pracy w Git. Jest ono odpowiednikiem polecenia git merge. Polecenia git checkout
i git merge
są kluczowymi narzędziami umożliwiającymi korzystanie z przepływów pracy Git.
Udostępnij ten artykuł
Następny temat
Zalecane lektury
Dodaj te zasoby do zakładek, aby dowiedzieć się więcej na temat rodzajów zespołów DevOps lub otrzymywać aktualności na temat metodyki DevOps w Atlassian.