Jak sprawdzić zmiany w zdalnym (źródłowym) repozytorium Git?


249

Pytanie

Jakie są polecenia Git do wykonywania następującego przepływu pracy?

Scenariusz

Sklonowałem z repozytorium i zrobiłem kilka własnych zmian w moim lokalnym repozytorium. W międzyczasie moi koledzy dokonali zatwierdzeń do zdalnego repozytorium. Teraz chcę:

  1. Sprawdź, czy w zdalnym repozytorium są jakieś nowe zatwierdzenia od innych osób, tj. origin?

  2. Powiedzmy, że od ostatniego ściągnięcia w 3 repozytorium były 3 nowe zatwierdzenia, chciałbym różnicować zatwierdzenia w zdalnym repozytorium, tj. HEAD~3Z HEAD~2, HEAD~2z HEAD~1i HEAD~1z HEAD.

  3. Po zdaniu sobie sprawy z tego, co zmieniło się zdalnie, chcę uzyskać najnowsze zatwierdzenia od innych.

Moje dotychczasowe ustalenia

Do kroku 2: Wiem notacji daszka HEAD^, HEAD^^itp oraz oznaczenie tyldy HEAD~2, HEAD~3etc.

Dla kroku 3: To chyba tylko git pull.



@Daniele, z którą łączysz się, jest znakomita, a nawet zawiera konfigurowalny skrypt bash. +1
gorbysbm

Odpowiedzi:


255

Możesz git fetch originzaktualizować zdalną gałąź w swoim repozytorium, aby wskazywała najnowszą wersję. Dla porównania z pilotem:

git diff origin/master

Tak, możesz również użyć notacji karetki.

Jeśli chcesz zaakceptować zmiany zdalne:

git merge origin/master

34
Różnica wygląda na odwróconą. Uważam, że jest łatwiejszy w użyciu, git diff HEAD origin/masterwięc diff pokazuje, co zostanie zastosowane, jeśli zaakceptuję zdalne zmiany.
cbliard

2
„git fetch origin” i „git show-branch * master” były dla mnie przydatne.
Léa Massiot

159
git remote update && git status 

Znalazłem to w odpowiedzi na Sprawdź, czy ściągnięcie jest potrzebne w Git

git remote updateaby zaktualizować swoje zdalne referencje. Następnie możesz zrobić jedną z kilku rzeczy, takich jak:

  1. git status -unopoinformuje Cię, czy gałąź, którą śledzisz, znajduje się przed, za czy może się rozdzieliła. Jeśli nic nie mówi, lokalne i zdalne są takie same.

  2. git show-branch *master pokaże zatwierdzenia we wszystkich gałęziach, których nazwy kończą się na master (np. master i origin / master).

Jeśli korzystasz -vz git remote updatewas może zobaczyć, które gałęzie został zaktualizowany, tak naprawdę nie potrzeba żadnych dalszych poleceń.


Niewystarczająco. Muszę zrobić git pull <remote> <branch>później, jak tylko będę musiał pchać, ponieważ wierzchołek mojego lokalnego oddziału znajdował się za odległym odpowiednikiem.
Overdrivr,

3
@Overdrivr pytanie wymaga sposobu sprawdzenia zmian przed przekazaniem zatwierdzeń do lokalnego oddziału. tak, musisz zaktualizować swój lokalny oddział po sprawdzeniu zmian.
Rajani Karuturi,

Czy to dla zdalnego pochodzenia czy wyższego szczebla?
vikramvi

1
Ta opcja -v nie działa. Bo git remote update -vmamerror: unknown switch `v'
Shad

1
@Shad należy zrobić, git remote -v updateniegit remote update -v
Rajani Karuturi

34

Dobrym sposobem na syntetyczne spojrzenie na to, co dzieje się w „pochodzeniu”, jest:

git remote show origin

11
Ale to polecenie nie pokazuje mi, ile zatwierdzeń dokonano w „pochodzeniu” od ostatniego ściągnięcia, prawda? Sposób, w jaki to zrozumiałem, „git remote show origin” jest operacją lokalną i nie przechodzi przez sieć w celu pobrania informacji.
Lernkurve,

24

Po prostu używam

git remote update
git status

Ten ostatni informuje następnie, ile jest zatwierdzeń za moją lokalną. (Jeśli w ogóle)

następnie

git pull origin master

zaktualizować mój lokalny :)


13

Moje pytanie jest dość regularny „coś nowego lub zmienione w repo”, więc whatchanged jest przydatny. Znalazłem to tutaj .

git whatchanged origin/master -n 1

1
nigdy nowe polecenie nie istniało. dzięki. tego właśnie szukałem
Saurabh Jain

11

Jedno potencjalne rozwiązanie

Dzięki rozwiązaniu Alana Haggai Alavi wpadłem na następujący potencjalny przepływ pracy:

Krok 1:

git fetch origin

Krok 2:

git checkout -b localTempOfOriginMaster origin/master
git difftool HEAD~3 HEAD~2
git difftool HEAD~2 HEAD~1
git difftool HEAD~1 HEAD~0

Krok 3:

git checkout master
git branch -D localTempOfOriginMaster
git merge origin/master

13
Dlaczego musisz utworzyć tymczasową gałąź dla różnic między wersjami pilota? możesz po prostugit diff origing/master^ origing/master^^
Pablo Marin-Garcia,

@ PabloMarin-Garcia: Dzięki. Wtedy tego nie wiedziałem.
Lernkurve,

2

git statusnie zawsze pokazuje różnicę między wzorcem a początkiem / wzorcem nawet po pobraniu. Jeśli chcesz, aby kombinacja git fetch origin && git statusdziałała, musisz podać informacje o śledzeniu między oddziałem lokalnym a miejscem pochodzenia:

# git branch --set-upstream-to=origin/<branch> <branch>

Dla oddziału głównego:

git branch --set-upstream-to=origin/master master

0

skoro nie zostało to dotychczas zasugerowane ... i uważam, że jest całkiem przydatne ...

po prostu używam

git fetch origin

aby pobrać zdalne zmiany, a następnie przeglądam zarówno lokalne, jak i oczekujące zdalne zatwierdzenia (i związane z nimi zmiany) za pomocą ładnego narzędzia gitk ( https://git-scm.com/docs/gitk ) z udziałem argumentu --all jak

gitk --all
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.