poleceniegit fetch
pobiera commity, pliki i refs ze zdalnego repozytorium do lokalnego repo. Pobieranie jest tym, co robisz, gdy chcesz zobaczyć, nad czym wszyscy inni pracowali. Jest podobny do svn update
w tym, że pozwala zobaczyć, jak postępowała Centralna historia, ale nie zmusza cię do scalania zmian w repozytorium. Git izoluje pobrane treści od istniejących lokalnych treści; nie ma to absolutnie żadnego wpływu na Twoje lokalne prace rozwojowe., Pobrana zawartość musi być wyraźnie sprawdzana za pomocą polecenia git checkout
. To sprawia, że pobieranie jest bezpiecznym sposobem na przeglądanie zmian przed integracją ich z lokalnym repozytorium.
podczas pobierania zawartości ze zdalnego repo,git pull
Igit fetch
są dostępne polecenia do wykonania zadania. Możesz rozważyć git fetch
'bezpieczną' wersję tych dwóch poleceń. Pobierze zawartość zdalną, ale nie zaktualizuje stanu pracy lokalnego repo, pozostawiając bieżącą pracę nienaruszoną., git pull
jest bardziej agresywną alternatywą; pobierze zdalną zawartość dla aktywnej lokalnej gałęzi i natychmiast uruchomi git merge
, aby utworzyć commit scalający dla nowej zdalnej zawartości. Jeśli oczekujesz zmian w toku, spowoduje to konflikty i rozpocznie proces rozwiązywania konfliktów scalania.
jak git fetch działa ze zdalnymi gałęziami
aby lepiej zrozumieć jak działagit fetch
omówmy jak Git organizuje i przechowuje commity., Za kulisami, w katalogu ./.git/objects
, Git przechowuje wszystkie commity, lokalne i zdalne. Git utrzymuje zdalne i lokalne commity branch wyraźnie oddzielone przez użycie refów branch. Refs dla lokalnych oddziałów są przechowywane w ./.git/refs/heads/
. Wykonanie polecenia git branch
spowoduje wyświetlenie listy refs lokalnego oddziału. Poniżej znajduje się przykład wyjścia git branch
z niektórymi nazwami gałęzi demo.,
git branch
master
feature1
debug2
Sprawdzenie zawartości katalogu/.git/refs/heads/
ujawni podobne wyjście.
ls ./.git/refs/heads/
master
feature1
debug2
zdalne gałęzie są tak samo jak lokalne gałęzie, z wyjątkiem tego, że mapują do commitów z czyjegoś repozytorium. Zdalne gałęzie są poprzedzone przez pilota, do którego należą, aby nie mieszać ich z lokalnymi gałęziami. Podobnie jak lokalne gałęzie, Git posiada również refy dla zdalnych gałęzi. Remote branch refs live in the ./.git/refs/remotes/
directory., Następny przykładowy fragment kodu pokazuje gałęzie, które możesz zobaczyć po pobraniu zdalnego repo o dogodnej nazwie remote-repo:
git branch -r
# origin/master
# origin/feature1
# origin/debug2
# remote-repo/master
# remote-repo/other-feature
to wyjście wyświetla lokalne gałęzie, które wcześniej zbadaliśmy, ale teraz wyświetla je z prefiksem origin/
. Dodatkowo widzimy teraz zdalne gałęzie poprzedzone remote-repo
. Możesz sprawdzić zdalną gałąź, tak jak lokalną, ale to stawia cię w odłączonym stanie HEAD
(tak jak sprawdzanie starego commita). Można je traktować jako gałęzie tylko do odczytu., Aby wyświetlić zdalne gałęzie, po prostu przekaż znacznik -r
do polecenia git branch
.
możesz sprawdzać zdalne gałęzie za pomocą zwykłych poleceńgit checkout
Igit log
. Jeśli zatwierdzisz zmiany zawarte w zdalnej gałęzi, możesz scalić je do lokalnej gałęzi o normalnym git merge
. Tak więc, w przeciwieństwie do SVN, synchronizacja lokalnego repozytorium ze zdalnym repozytorium jest w rzeczywistości procesem dwuetapowym: fetch, a następnie merge. Polecenie git pull
jest wygodnym skrótem dla tego procesu.,
polecenia i opcje Git fetch
git fetch <remote>
pobiera wszystkie gałęzie z repozytorium. To również pobiera wszystkie wymagane commity i pliki z innego repozytorium.
git fetch <remote> <branch>
to samo co powyższe polecenie, ale pobiera tylko określoną gałąź.
git fetch --all
ruch mocy, który pobiera wszystkie zarejestrowane piloty i ich gałęzie:
git fetch --dry-run
opcja--dry-run
wykona uruchomienie demo polecenia., Wyświetli przykłady działań, które podejmie podczas pobierania, ale nie zastosuje ich.
git fetch a remote branch
poniższy przykład zademonstruje jak pobrać zdalną gałąź i zaktualizować lokalny stan pracy do zdalnej zawartości. W tym przykładzie załóżmy, że istnieje centralne źródło repo, z którego lokalne repozytorium zostało sklonowane przy użyciu polecenia git clone
. Załóżmy również dodatkowe zdalne repozytorium o nazwie coworkers_repo, które zawiera feature_branch, które będziemy konfigurować i pobierać., Przy tych założeniach kontynuujmy przykład.
najpierw musimy skonfigurować zdalne repo używając poleceniagit remote
.
git remote add coworkers_repo [email protected]:coworker/coworkers_repo.git
tutaj stworzyliśmy odniesienie do repo współpracownika przy użyciu adresu URL repo. Teraz przekażemy tę zdalną nazwę do git fetch
, aby pobrać zawartość.
git fetch coworkers_repo coworkers/feature_branch
fetching coworkers/feature_branch
mamy teraz lokalnie zawartość coworkers/feature_branch będziemy potrzebować zintegrować to z naszym lokalnym egzemplarzem roboczym., Rozpoczynamy ten proces za pomocą polecenia git checkout
, aby sprawdzić nowo pobraną zdalną gałąź.
git checkout coworkers/feature_branch
Note: checking out coworkers/feature_branch'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch-name>
wyjście z tej operacji kasowania wskazuje, że jesteśmy w odłączonym stanieHEAD
. Jest to oczekiwane i oznacza, że naszHEAD
ref wskazuje na ref, który nie jest zgodny z naszą lokalną historią. Ponieważ HEAD
jest wskazywany na ref coworkers / feature_branch, możemy utworzyć nową lokalną gałąź z tego ref., Wyjście' wolnostojące HEAD
' pokazuje nam, jak to zrobić, używając polecenia git checkout
:
git checkout -b local_feature_branch
tutaj stworzyliśmy nową lokalną gałąź o nazwie local_feature_branch. To powoduje, że aktualizacje HEAD
wskazują na najnowszą zdalną zawartość i możemy kontynuować jej rozwój od tego momentu.
Synchronize origin with git fetch
poniższy przykład przedstawia typowy przepływ pracy do synchronizacji lokalnego repozytorium z główną gałęzią repozytorium centralnego.,
git fetch origin
spowoduje to wyświetlenie gałęzi, które zostały pobrane:
commity z tych nowych zdalnych gałęzi są pokazane jako kwadraty zamiast okręgów na poniższym diagramie. Jak widać, git fetch
daje dostęp do całej struktury gałęzi innego repozytorium.,
aby zobaczyć, jakie zmiany zostały dodane do nadrzędnej gałęzi, możesz uruchomić git log
używając origin/master jako filtra:
git log --oneline master..origin/master
aby zatwierdzić zmiany i scalić je do lokalnej gałęzi nadrzędnej, użyj następujące polecenia:
git checkout master
git log origin/master
następnie możemy użyć git merge origin/master
:
git merge origin/master
gałęzie Origin/master i Master wskazują teraz na ten sam commit, a Ty jesteś zsynchronizowany z postępem w górę.,
Git fetch summary
w recenzjigit fetch
jest głównym poleceniem używanym do pobierania zawartości ze zdalnego repozytorium. git fetch
jest używany w połączeniu z git remote
, git branch
, git checkout
I git reset
do aktualizacji lokalnego repozytorium do stanu pilota. Polecenie git fetch
jest krytycznym elementem współpracy z Gitem., git fetch
has similar behavior to git pull
, however, git fetch
can be considered a safer, nondestructive version.