Jakie są różnice między git pull
i git fetch
?
git
version-control
git-pull
git-fetch
pupeno
źródło
źródło
git fetch; git reset --hard origin/master
częścią naszego przepływu pracy. Wysadza lokalne zmiany, utrzymuje Cię na bieżąco z ALE, ale upewnia się, że nie tylko wprowadzasz nowe zmiany na bieżąco i robisz bałagan. Używamy go od dłuższego czasu i jest w zasadzie o wiele bezpieczniejszy w praktyce. Pamiętaj tylko, aby najpierw dodać / zatwierdzić / ukryć wszelkie prace w toku!Odpowiedzi:
W najprostszych słowach,
git pull
robigit fetch
po której następujegit merge
.W
git fetch
dowolnym momencie możesz zrobić aktualizację swoich oddziałów do zdalnego śledzeniarefs/remotes/<remote>/
.Ta operacja nigdy nie zmienia żadnych lokalnych oddziałów
refs/heads
i jest bezpieczna bez zmiany kopii roboczej. Słyszałem nawet o ludziach, którzygit fetch
okresowo pracują w tle w cronie (chociaż nie poleciłbym tego robić).To,
git pull
co zrobiłbyś, aby zaktualizować lokalny oddział do jego wersji zdalnej, jednocześnie aktualizując inne oddziały zdalnego śledzenia.Dokumentacja Git - Git Pull :
źródło
git pull
zawsze połączy się z bieżącym oddziałem . Więc wybrać gałąź chcesz ciągnąć od , i ciągnie go do bieżącego oddziału. Oddział z może być lokalny lub zdalny; może to być nawet gałąź zdalna, która nie jest zarejestrowanagit remote
(co oznacza, że podajesz adres URL wgit pull
wierszu poleceń)./home/alice/
i robięgit fetch /home/bob
, jakie parametry powinienem przekazać do następnegogit merge
?pull
nie można go naśladować za pomocą znakufetch
plus amerge
. Właśnie pobrałem zmianę, w której zmienia się tylko zdalny wskaźnik gałęzi imerge
nie chce nic robić.pull
, z drugiej strony, szybko przesyła moją gałąź śledzenia.Kiedy korzystasz
pull
, Git próbuje automatycznie wykonać za Ciebie pracę. Jest wrażliwy na kontekst , więc Git połączy wszelkie wyciągnięte zatwierdzenia z gałęzi, w której obecnie pracujesz.pull
Automatycznie scali te zatwierdzenia, nie pozwalając na ich przejrzenie w pierwszej kolejności . Jeśli nie będziesz ściśle zarządzał swoimi oddziałami, możesz napotykać częste konflikty.Gdy Ty
fetch
, Git zbiera wszelkie zatwierdzenia z gałęzi docelowej, które nie istnieją w bieżącym oddziale i zapisuje je w lokalnym repozytorium . Jednak nie łączy ich z bieżącym oddziałem . Jest to szczególnie przydatne, jeśli chcesz aktualizować swoje repozytorium, ale pracujesz nad czymś, co może się zepsuć, jeśli zaktualizujesz swoje pliki. Aby zintegrować zatwierdzenia z gałęzią master, używaszmerge
.źródło
git fetch
aktualizuje tylko.git/
katalog (AKA: lokalne repozytorium) i nic poza.git/
(AKA: działające drzewo). Nie zmienia twoich lokalnych oddziałów i też nie dotykamaster
. Dotykaremotes/origin/master
jednak (patrzgit branch -avv
). Jeśli masz więcej pilotów, spróbujgit remote update
. To jestgit fetch
dla wszystkich pilotów w jednym poleceniu..git/refs/remotes/origin/
..git
? Jaka jest zamierzona korzyść i co mam potem zrobić?Ważne jest, aby porównać filozofię projektowania git z filozofią bardziej tradycyjnego narzędzia kontroli źródła, takiego jak SVN.
Subversion zostało zaprojektowane i zbudowane w modelu klient / serwer. Istnieje jedno repozytorium, którym jest serwer, a kilku klientów może pobrać kod z serwera, pracować na nim, a następnie przekazać go z powrotem do serwera. Zakłada się, że klient zawsze może skontaktować się z serwerem, gdy musi wykonać operację.
Git został zaprojektowany do obsługi bardziej rozproszonego modelu bez potrzeby posiadania centralnego repozytorium (choć z pewnością możesz go użyć, jeśli chcesz). Ponadto git został zaprojektowany tak, aby klient i „serwer” nie musiały być jednocześnie w trybie online. Git został zaprojektowany tak, aby ludzie z niewiarygodnego linku mogli nawet wymieniać kod przez e-mail. Możliwe jest całkowicie odłączone działanie i nagranie płyty CD w celu wymiany kodu przez git.
Aby wesprzeć ten model, git utrzymuje lokalne repozytorium z twoim kodem, a także dodatkowe lokalne repozytorium, które odzwierciedla stan repozytorium zdalnego. Zachowując lokalnie kopię zdalnego repozytorium, git może ustalić potrzebne zmiany, nawet gdy zdalne repozytorium jest nieosiągalne. Później, gdy musisz wysłać zmiany do kogoś innego, git może przenieść je jako zestaw zmian od momentu znanego zdalnemu repozytorium.
git fetch
to polecenie, które mówi „zaktualizuj moją lokalną kopię zdalnego repozytorium”.git pull
mówi „przenieś zmiany w zdalnym repozytorium do miejsca, w którym przechowuję własny kod”.Zwykle
git pull
robi togit fetch
, aktualizując lokalną kopię zdalnego repozytorium, a następnie scalając zmiany z własnym repozytorium kodu i ewentualnie kopią roboczą.Należy pamiętać, że na stacji roboczej często znajdują się co najmniej trzy kopie projektu. Jedna kopia to twoje własne repozytorium z własną historią zatwierdzeń. Druga kopia to kopia robocza, w której edytujesz i budujesz. Trzecia kopia to lokalna „buforowana” kopia zdalnego repozytorium.
źródło
remoteName/
Git od podstaw, to bardzo dobra lektura. Kiedy zrozumiesz, jak działa Git - i to jest naprawdę proste , naprawdę - wszystko ma sens.Oto obraz Olivera Steele, jak to wszystko do siebie pasuje :
Jeśli jest wystarczające zainteresowanie, mogę zaktualizować obraz, aby dodać
git clone
igit merge
...źródło
git clone
igit merge
byłby bardzo pomocny!git merge
- powinien wyraźnie pokazywać, żemerge
wywołanie osobno NIE jest tym samym, co wywołanie,pull
ponieważpull
łączy się tylko ze zdalnym i ignoruje lokalne zatwierdzenia w lokalnym oddziale, który śledzi, z którego jest pobierany oddział zdalny.Jednym z przykładów użycia
git fetch
jest to, że poniższe informacje powiedzą ci o wszelkich zmianach w zdalnej gałęzi od czasu ostatniego ściągnięcia ... abyś mógł sprawdzić przed wykonaniem rzeczywistego ściągnięcia, co może zmienić pliki w bieżącym oddziale i kopii roboczej.Zobacz: https://git-scm.com/docs/git-diff na temat składni podwójnych i potrójnych kropek w poleceniu diff
źródło
git diff ..origin
?git diff ...origin
jest równoważnygit diff $(git-merge-base HEAD origin) origin
(patrzgit diff [--options] <commit>...<commit> [--] [<path>…]
sekcja kernel.org/pub/software/scm/git/docs/git-diff.html#_description ), który różni się odgit diff origin
;git diff ...origin
jest koncepcyjnie zmianami dokonanymiorigin
od czasu odgałęzienia bieżącej gałęziorigin
, agit diff origin
także odwrotnością zmian dokonanych w bieżącym odgałęzieniu od rozgałęzieniaorigin
.git diff origin/master
działa, jak wspomniano poniżejTrochę mnie kosztowało zrozumienie, jaka była różnica, ale to proste wyjaśnienie.
master
w twoim lokalnym hoście jest oddział.Klonując repozytorium, pobierasz całe repozytorium do lokalnego hosta. Oznacza to, że w tym momencie masz wskaźnik początkowy / główny
HEAD
i główny wskazujący na to samoHEAD
.kiedy zaczynasz pracę i robisz zatwierdzenia, przesuwasz główny wskaźnik do
HEAD
+ twoich zatwierdzeń. Ale wskaźnik origin / master wciąż wskazuje na to, co było po sklonowaniu.Różnica będzie więc następująca:
git fetch
, po prostu pobierze wszystkie zmiany w zdalnym repozytorium ( GitHub ) i przeniesie wskaźnik origin / master doHEAD
. W międzyczasie twój lokalny kierownik oddziału będzie nadal wskazywał, gdzie ma.git pull
, to w zasadzie pobierze (jak wyjaśniono wcześniej) i połączy wszelkie nowe zmiany w gałęzi master i przeniesie wskaźnik doHEAD
.źródło
git fetch
dosłownie pobieram zmiany z repozytorium zdalnego do repozytorium lokalnego, ale NIE zatwierdzam ich - tj. Nadal trzeba je dodać / zatwierdzić do repozytorium lokalnego.Czasami pomaga wizualna reprezentacja.
źródło
git pull
jest pomijanie fetch, co oczywiście jest niedokładna.Krótko
git fetch
jest podobny,pull
ale nie łączy się. tzn. pobiera zdalne aktualizacje (refs
iobjects
), ale lokalny pozostaje taki sam (tzn.origin/master
jest aktualizowany, alemaster
pozostaje taki sam).git pull
ściąga z pilota i natychmiast się łączy.Więcej
git clone
klonuje repozytorium.git rebase
zapisuje rzeczy z twojego obecnego oddziału, który nie znajduje się w odgałęzieniu powyżej, w obszarze tymczasowym. Twój oddział jest teraz taki sam, jak przed rozpoczęciem zmian. Tak,git pull -rebase
będzie ciągnąć w dół zdalnych zmian, przewijanie do lokalnego oddziału, odtworzyć zmiany na górnej części bieżącej jedna gałąź jeden aż będziesz up-to-date.Ponadto
git branch -a
pokaże Ci dokładnie, co się dzieje ze wszystkimi oddziałami - lokalnymi i zdalnymi.Ten post był przydatny:
Różnica między git pull, git fetch i git clone (i git rebase) - Mike Pearce
i pokrowce
git pull
,git fetch
,git clone
igit rebase
.====
AKTUALIZACJA
Pomyślałem, że zaktualizuję to, aby pokazać, jak faktycznie wykorzystasz to w praktyce.
Zaktualizuj lokalne repozytorium zdalnie (ale nie scalaj):
Po pobraniu aktualizacji zobaczmy różnice:
Jeśli jesteś zadowolony z tych aktualizacji, połącz:
Uwagi:
W kroku 2: Aby uzyskać więcej informacji na temat różnic między lokalnymi i zdalnymi, zobacz: Jak porównać lokalną gałąź git z jej gałęzią zdalną?
W kroku 3: Prawdopodobnie bardziej dokładne (np. W szybko zmieniającym się repozytorium) jest zrobienie
git rebase origin
tutaj. Zobacz komentarz @Justin Ohms w innej odpowiedzi.Zobacz także: http://longair.net/blog/2009/04/16/git-fetch-and-merge/
źródło
git clone
. Podaję wskazówkę w cudzysłowie, ponieważ zakładam, że oznaczałoby to, kim jest mistrz i co ktoś „pobrałby jako zip” z github.comWyciągnąłbyś, jeśli chcesz scalić historie, ściągnąłbyś, gdybyś po prostu „chciałby kodu”, ponieważ ktoś oznaczył tu jakieś artykuły.
źródło
git fetch
, pobierze zmiany z repozytorium i zaktualizuje lokalny oddział zdalny. Nie wpływa na lokalny oddział, który śledzi lokalny oddział zdalny, więc nie wpływa na kopię roboczą. Teraz, gdy to zrobiszmerge
, połączy pobrane zmiany z lokalnym oddziałem.Możesz pobrać ze zdalnego repozytorium, zobaczyć różnice, a następnie pobrać lub scalić.
To jest przykład zdalnego repozytorium o nazwie
origin
i gałęzi o nazwiemaster
śledzącej gałąź zdalnąorigin/master
:źródło
Odpowiedź jest krótka i prosta, że
git pull
jest po prostugit fetch
następujegit merge
.Bardzo ważne jest, aby pamiętać, że
git pull
będzie automatycznie łączą się, czy chcesz, czy nie . Może to oczywiście prowadzić do konfliktów scalania. Powiedzmy, że twój pilot jest,origin
a twoja gałąź tomaster
. Jeśligit diff origin/master
to zrobisz, powinieneś mieć pojęcie o potencjalnych konfliktach scalania i odpowiednio przygotować swój lokalny oddział.Oprócz ciągnięcia i pchania niektóre przepływy pracy obejmują
git rebase
, na przykład ten, który parafrazuję z powiązanego artykułu:Jeśli znajdziesz się w takiej sytuacji, możesz ulec pokusie
git pull --rebase
. Jeśli naprawdę nie wiesz, co robisz, odradzałbym to. To ostrzeżenie pochodzi zeman
strony dlagit-pull
wersji2.3.5
:źródło
git pull --rebase
to nie jest właściwe w danej sytuacji, czy jest to właściwe, jeśli odbywa się to w dwóch etapach? Jeśli jest to właściwe, co stanowi dodatkową korzyść z robienia tego w dwóch etapach?rebase
gdy pracujesz nad lokalnym oddziałem, który nie został jeszcze wypchnięty. Jeśli pracujesz nad oddziałem, który istnieje w trybie zdalnym,rebase
może to powodować pewne nieprzyjemne problemy, więc powinieneś preferować regularnemerge
.OK , oto kilka informacji na temat
git pull
igit fetch
, dzięki czemu można zrozumieć rzeczywiste różnice ... w kilku prostych słowach, pobieranie pobiera najnowsze dane, ale nie zmiany kodu i nie będzie bałaganu z bieżącym lokalnym kodem oddziału, ale pull get kod się zmienia i łączy go z lokalnym oddziałem, czytaj dalej, aby uzyskać więcej informacji na temat każdego z nich:ściągnij
Pobierze wszystkie referencje i obiekty oraz wszelkie nowe oddziały do lokalnego repozytorium ...
git pull
Zastosuje zmiany ze zdalnego do bieżącego oddziału w lokalnym ...
Tworzę również poniższy rysunek, aby pokazać, jak
git fetch
i jakgit pull
współpracować ...źródło
Ta interaktywna reprezentacja graficzna jest bardzo pomocna w zrozumieniu git: http://ndpsoftware.com/git-cheatsheet.html
git fetch
po prostu „pobiera” zmiany ze zdalnego do lokalnego repozytorium.git pull
pobiera zmiany i łączy je w bieżący oddział. „W trybie domyślnymgit pull
jest skrótem,git fetch
po którym następujegit merge FETCH_HEAD
”.źródło
Premia:
Mówiąc o pull & fetch w powyższych odpowiedziach, chciałbym podzielić się ciekawą sztuczką,
git pull --rebase
To powyższe polecenie jest najbardziej użytecznym poleceniem w moim życiu git, które zaoszczędziło wiele czasu.
Przed wypchnięciem nowych zatwierdzeń na serwer, spróbuj tego polecenia, a ono automatycznie zsynchronizuje najnowsze zmiany na serwerze (z funkcją pobierania + scalania) i umieści twoje zatwierdzenie na górze w dzienniku git. Nie musisz martwić się o ręczne wyciąganie / scalanie.
Znajdź szczegóły na: http://gitolite.com/git-pull--rebase
źródło
git pull
igit pull --rebase
?Lubię mieć wizualną reprezentację sytuacji, aby zrozumieć te rzeczy. Może inni programiści też chcieliby to zobaczyć, więc oto mój dodatek. Nie jestem do końca pewien, czy wszystko jest w porządku, więc proszę o komentarz, jeśli znajdziesz jakieś błędy.
Niektóre główne zalety posiadania ściągniętego lustra pilota to:
źródło
git pull
także nie wykonuje scalenia, czyli przejścia do kopii roboczej?Walczyłem również z tym. W rzeczywistości znalazłem się tutaj, szukając w Google dokładnie tego samego pytania. Po przeczytaniu wszystkich tych odpowiedzi w końcu namalowałem obraz w mojej głowie i postanowiłem to sprowadzić, patrząc na stan 2 repozytoriów i 1 piaskownicy oraz działań wykonanych w czasie, oglądając ich wersję. Oto co wymyśliłem. Popraw mnie, jeśli coś pomieszałem.
Trzy repozytoria z pobraniem:
Trzy repozytoria z pociągnięciem
Pomogło mi to zrozumieć, dlaczego pobieranie jest bardzo ważne.
źródło
Różnicę między GIT Fetch a GIT Pull można wytłumaczyć następującym scenariuszem: (pamiętając, że zdjęcia mówią głośniej niż słowa !, przedstawiłem obrazki)
Weźmy przykład, że pracujesz nad projektem z członkami swojego zespołu. Będą więc jedną główną gałęzią projektu, a wszyscy współtwórcy muszą rozwidlić go do własnego lokalnego repozytorium, a następnie pracować nad tym lokalnym oddziałem, aby zmodyfikować / dodać moduły, a następnie wypchnąć z powrotem do głównej gałęzi.
Tak, Stan początkowy obu gałęzi kiedy rozwidlone główny projekt na lokalnym repozytorium będzie jak to- (
A
,B
iC
są już gotowe moduły projektu)Teraz rozpoczęły się prace nad nowym modułem (przypuszczam
D
) i po zakończeniuD
modułu, który chcesz przesunąć do głównej gałęzi, Ale tymczasem co się dzieje, że jeden z twoich kolegów opracował nowy modułE
,F
i modyfikowaneC
.Tak więc teraz dzieje się tak, że w twoim lokalnym repozytorium brakuje oryginalnego postępu projektu, a zatem przekazanie twoich zmian do głównej gałęzi może prowadzić do konfliktu i może spowodować
D
awarię modułu .Aby uniknąć takich problemów i pracować równolegle z pierwotnym postępem projektu, są dwa sposoby:
1. Git Fetch - Spowoduje to pobranie wszystkich zmian, które zostały wprowadzone w projekcie źródłowym / głównym oddziału, które nie są obecne w oddziale lokalnym. I będzie czekać na polecenie Git Merge, aby zastosować zmiany, które zostały pobrane do Twojego repozytorium lub oddziału.
Teraz możesz dokładnie monitorować pliki przed scaleniem ich z repozytorium. Możesz także zmodyfikować,
D
jeśli jest to wymagane ze względu na ZmodyfikowaneC
.2. Git Pull - spowoduje to zaktualizowanie twojego lokalnego oddziału o gałęzi origin / main, tzn. To, co robi, to połączenie Git Fetch i Git scalają jeden po drugim. Może to jednak powodować konflikty, dlatego zaleca się używanie Git Pull z czystą kopią.
źródło
Mówimy po prostu:
Jeśli uruchomisz
git pull
, nie musisz scalać danych z lokalnymi. Jeśli uruchomiszgit fetch
, oznacza to, że musisz uruchomić,git merge
aby pobrać najnowszy kod na komputer lokalny. W przeciwnym razie lokalny kod maszynowy nie zostałby zmieniony bez scalenia.Więc w Git Gui, kiedy pobierasz, musisz scalić dane. Sam pobierz nie spowoduje zmiany kodu w twoim lokalnym. Możesz to sprawdzić po aktualizacji kodu, pobierając raz, pobierz i zobacz; kod się nie zmieni. Następnie scalasz ... Zobaczysz zmieniony kod.
źródło
git pull == git fetch + git merge
:)git pull --rebase = git fetch + git rebase
git fetch
ściąga kod ze zdalnego serwera do gałęzi śledzenia w lokalnym repozytorium. Jeśli pilot jest nazwanyorigin
(domyślnie), wówczas te oddziały będą w zasięguorigin/
, na przykładorigin/master
,origin/mybranch-123
itd To nie są wasze obecne oddziały są lokalne kopie tych gałęzi z serwera.git pull
wykonuje,git fetch
ale następnie łączy również kod z gałęzi śledzenia w bieżącą lokalną wersję tej gałęzi. Jeśli nie jesteś jeszcze gotowy na te zmiany,git fetch
najpierw.źródło
git fetch
pobierze zdalne gałęzie, abyś mógłgit diff
lubgit merge
one z bieżącą gałęzią.git pull
uruchomi pobieranie na zdalnym brachie śledzonym przez bieżącą gałąź, a następnie scali wynik. Możesz użyć,git fetch
aby sprawdzić, czy są jakieś aktualizacje zdalnego oddziału bez konieczności scalania ich z lokalnym oddziałem.źródło
Git Fetch
Pobierasz zmiany do lokalnego oddziału od miejsca pochodzenia poprzez pobieranie. Fetch prosi zdalne repo o wszystkie zatwierdzenia dokonane przez innych, ale nie masz ich w repozytorium lokalnym. Pobierz pobiera te zatwierdzenia i dodaje je do lokalnego repozytorium.
Git Merge
Możesz zastosować zmiany pobrane poprzez pobieranie za pomocą polecenia scalania. Scalenie pobierze zatwierdzenia pobrane z pobierania i spróbuje dodać je do lokalnego oddziału. Scalenie zachowa historię zatwierdzania lokalnych zmian, dzięki czemu, kiedy udostępnisz swój oddział push, Git będzie wiedział, jak inni mogą scalić twoje zmiany.
Git Pull
Fetch i merge biegają razem tak często, że powstało polecenie, które łączy oba, pull. Pull wykonuje pobieranie, a następnie scalanie w celu dodania pobranych commits do lokalnego oddziału.
źródło
Jedyna różnica między
git pull
igit fetch
polega na tym, że:git pull
ściąga ze zdalnej gałęzi i łączy ją.git fetch
pobiera tylko ze zdalnej gałęzi, ale nie łączy siętj. git pull = git fetch + git merge ...
źródło
rm -rf
i zacząłem od nowa. Głupi Git, proszę, pozwól mi tylko wziąć prąd, abym mógł wrócić do pracy?Mówiąc prościej, gdybyś miał wskoczyć do samolotu bez połączenia z Internetem ... przed odlotem mógłbyś to zrobić
git fetch origin <master>
. Pobierałby wszystkie zmiany na twoim komputerze, ale trzymał go oddzielnie od lokalnego obszaru programowania / pracy.W samolocie możesz wprowadzić zmiany w lokalnym obszarze roboczym, a następnie scalić je z tym, co pobrałeś i rozwiązać wszystkie potencjalne konflikty scalania bez połączenia z Internetem. I chyba że ktoś wprowadzi nowe sprzeczne zmiany w zdalnym repozytorium, to kiedy dotrzesz do miejsca docelowego, zrobisz to
git push origin <branch>
i pójdziesz po kawę.Z tego niesamowitego samouczka Atlassian :
Z
git pull
:git merge
.git fetch
gdzie wpływa to tylko na ciebie.git/refs/remotes
, git pull wpłynie zarówno na ciebie, jak.git/refs/remotes
i na.git/refs/heads/
Hmmm ... więc jeśli nie aktualizuję kopii roboczej
git fetch
, to gdzie wprowadzam zmiany? Gdzie Git Fetch przechowuje nowe zatwierdzenia?Świetne pytanie. Umieszcza go gdzieś w izolacji od kopii roboczej. Ale znowu gdzie? Dowiedzmy Się.
W katalogu projektu (tj. Tam, gdzie wykonujesz
git
polecenia):ls
. Spowoduje to wyświetlenie plików i katalogów. Nic fajnego, wiem.Teraz zrób
ls -a
. To pokaże dot plików , czyli plików rozpoczynające się od.
Ciebie będzie mógł zobaczyć katalog o nazwie:.git
.cd .git
. To oczywiście zmieni twój katalog.ls
. Zobaczysz listę katalogów. Szukamyrefs
. Zrobićcd refs
.heads
aremotes
. Użyj,cd
aby sprawdzić również w nich.git fetch
czynność spowoduje aktualizację elementów w/.git/refs/remotes
katalogu. Nie zaktualizuje niczego w/.git/refs/heads
katalogu.git pull
najpierw zrobigit fetch
, zaktualizuje elementy w/.git/refs/remotes
katalogu, a następnie połączy się z lokalnym, a następnie zmieni nagłówek w/.git/refs/heads
katalogu.Bardzo dobrą powiązaną odpowiedź można również znaleźć w temacie Gdzie znajduje się „git fetch”? .
Poszukaj też „Notacji ukośnika” w poście o konwencjach nazewnictwa gałęzi Git . Pomaga ci lepiej zrozumieć, w jaki sposób Git umieszcza rzeczy w różnych katalogach.
Aby zobaczyć rzeczywistą różnicę
Po prostu zrób:
Jeśli zdalny moduł główny został zaktualizowany, pojawi się następujący komunikat:
Jeśli tego nie zrobiłeś
fetch
i właśnie to zrobiłeś,git checkout master
lokalny git nie wiedziałby, że dodano 2 zatwierdzenia. I powiedziałoby to po prostu:Ale to jest przestarzałe i niepoprawne. To dlatego, że git przekaże ci informacje zwrotne wyłącznie na podstawie tego, co wie. Nie jest świadomy nowych zobowiązań, których jeszcze nie rozebrał ...
Czy jest jakiś sposób, aby zobaczyć nowe zmiany wprowadzone zdalnie podczas lokalnej pracy w oddziale?
Niektóre IDE (np. Xcode) są super inteligentne i wykorzystują wynik a
git fetch
i mogą zawierać adnotacje do linii kodu, które zostały zmienione w zdalnej gałęzi twojego obecnego oddziału. Jeśli linia ta została zmieniona zarówno przez zmiany lokalne, jak i gałąź zdalną, wówczas linia ta zostanie opatrzona adnotacjami na czerwono. To nie jest konflikt scalania. Jest to potencjalny konflikt scalania. Jest to headsup, którego możesz użyć do rozwiązania przyszłego konfliktu scalania przed zrobieniem gogit pull
ze zdalnej gałęzi.Zabawna wskazówka:
Jeśli pobrałeś zdalną gałąź, np. Zrobiłeś:
To przejdzie do twojego katalogu pilotów. Nadal nie jest dostępny dla twojego lokalnego katalogu. Upraszcza to jednak dokonywanie płatności do tej zdalnej gałęzi przez DWIM (Rób co mam na myśli):
nie musisz już robić:
Więcej na ten temat przeczytasz tutaj
źródło
Git pozwala na stosowanie chronologicznie starszych zatwierdzeń po nowszych zatwierdzeniach. Z tego powodu przeniesienie zatwierdzeń między repozytoriami jest podzielone na dwa etapy:
Kopiowanie nowych zatwierdzeń ze zdalnego oddziału do kopii tego zdalnego oddziału w lokalnym repozytorium.
(operacja repo do repo)
master@remote >> remote/origin/master@local
Integrowanie nowych zatwierdzeń z lokalnym oddziałem
(operacja repo)
remote/origin/master@local >> master@local
Istnieją dwa sposoby wykonania kroku 2. Możesz:
W
git
terminologii etap 1 togit fetch
etap 2 togit merge
lubgit rebase
git pull
jestgit fetch
igit merge
źródło
Git otrzymuje gałąź najnowszej wersji ze zdalnego do lokalnego za pomocą dwóch poleceń:
git fetch: Git ma pobrać najnowszą wersję ze zdalnego do lokalnego, ale nie łączy się automatycznie.
git fetch origin master
git log -p master..origin/master
git merge origin/master
Powyższe polecenia oznaczają, że pobierz najnowszą wersję gałęzi głównej ze źródła ze zdalnego do gałęzi głównej źródłowej. A następnie porównuje lokalną gałąź główną i gałąź główną pochodzenia. Na koniec połącz.
git pull: Git pobierze najnowszą wersję ze zdalnego i połączy się z lokalnym.
git pull origin master
Powyższe polecenie jest równoważne z
git fetch
igit merge
. W praktycegit fetch
może być bardziej bezpieczny, ponieważ przed scaleniem możemy zobaczyć zmiany i zdecydować, czy scalić.źródło
Aby to zrozumieć, musisz najpierw zrozumieć, że lokalny git utrzymuje nie tylko lokalne repozytorium, ale także lokalną kopię zdalnego repozytorium.
git fetch
aktualizuje lokalną kopię zdalnego repozytorium. Na przykład, jeśli Twoim zdalnym repozytorium jest GitHub - możesz pobrać wszelkie zmiany dokonane w zdalnym repozytorium do swojej lokalnej kopii w zdalnym repozytorium. Umożliwi to wykonywanie operacji takich jak porównywanie lub scalanie.git pull
z drugiej strony wprowadzi zmiany w zdalnym repozytorium do miejsca, w którym przechowujesz swój własny kod. Zazwyczajgit pull
najpierw zrobigit fetch
aktualizację lokalnej kopii zdalnego repozytorium, a następnie połączy zmiany z własnym repozytorium kodu i ewentualnie kopią roboczą.źródło
git pull == (git fetch + git merge)
git fetch nie zmienia lokalnych oddziałów.
Jeśli masz już lokalne repozytorium ze zdalną konfiguracją dla pożądanego projektu, możesz pobrać wszystkie gałęzie i tagi dla istniejącego zdalnego za pomocą git fetch. ... Funkcja pobierania nie wprowadza żadnych zmian w oddziałach lokalnych, dlatego konieczne będzie połączenie oddziału zdalnego ze sparowanym oddziałem lokalnym w celu uwzględnienia nowo pobranych zmian. z github
źródło
Staramy się być jasne i proste.
Polecenie git pull jest w rzeczywistości poleceniem
shortcut
for git fetch, po którym następuje polecenie git merge lub polecenie git rebase, w zależności od konfiguracji. Możesz skonfigurować swoje repozytorium Git, aby git pull był pobierany, a następnie rebase.źródło
Prosta reprezentacja graficzna dla początkujących,
tutaj,
pobierze kod z repozytorium i zresetuje z lokalnym ... w git pull istnieje możliwość utworzenia nowych zatwierdzeń.
ale w ,
ściągnij
pobierze kod z repozytorium i musimy go zmienić ręcznie za pomocą
git rebase
np .: zamierzam pobrać z serwera głównego i rozłożyć bazę w moim lokalnym komputerze głównym.
1) git pull (rebase zrobi się automatycznie):
tutaj origin jest twoim zdalnym mistrzem repozytorium to twoja gałąź
2) git fetch (trzeba ręcznie zmienić bazę):
pobierze zmiany serwera z miejsca pochodzenia. i będzie w twoim lokalnym, dopóki sam nie wydasz podstawy. musimy ręcznie naprawić konflikty, sprawdzając kody.
spowoduje to zmianę kodu na lokalny. wcześniej upewnij się, że jesteś w odpowiedniej branży.
źródło
W rzeczywistości Git przechowuje kopię własnego kodu i zdalnego repozytorium.
To polecenie
git fetch
aktualizuje lokalną kopię, pobierając dane ze zdalnego repozytorium. Potrzebujemy tego, ponieważ ktoś inny mógł wprowadzić pewne zmiany w kodzie i chcesz być na bieżąco.Polecenie
git pull
przenosi zmiany w zdalnym repozytorium do miejsca przechowywania własnego kodu. Zwyklegit pull
robi się to, najpierw wykonując polecenie „git fetch”, aby zaktualizować lokalną kopię zdalnego repozytorium, a następnie łączy zmiany z własnym repozytorium kodu i ewentualnie z kopią roboczą.źródło