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.