git diff między sklonowanym i oryginalnym zdalnym repozytorium


170

Sklonowałem repozytorium github i nie wprowadziłem żadnych zmian lokalnie. Repozytorium Github przesunęło się do przodu z zatwierdzeniami w tej samej gałęzi.

  1. Jak znaleźć różnicę między moim lokalnym repozytorium a oryginalnym repozytorium github?
  2. Jak znaleźć różnicę między moją kopią roboczą a oryginalnym repozytorium github?
  3. Jak znaleźć różnicę między moim lokalnym repozytorium a innym repozytorium github tego samego projektu?


1
@CiroSantilli 新疆 改造 中心 六四 事件 法轮功: Myślę, że jest wystarczająco inny: drugie pytanie dotyczy dowolnego ogólnego oddziału zdalnego, podczas gdy dotyczy to GitHub plus dotyczy trzech różnych punktów początkowych. Są zdecydowanie podobne, więc Twój link jest z pewnością przydatny.
— jvriesem

Odpowiedzi:


161

1) Dodaj zdalne repozytoria, które chcesz porównać:

git remote add foobar git://github.com/user/foobar.git

2) Zaktualizuj lokalną kopię pilota:

git fetch foobar

Pobieranie nie zmieni kopii roboczej.

3) Porównaj dowolną gałąź z lokalnego repozytorium z dowolnym dodanym zdalnym:

git diff master foobar/master

Czy będę potrzebować git fetch przed diff? Wydaje mi się, że bez tego nie da się odróżnić.
— Oleg Proudnikov

W rzeczywistości jest to odpowiedź tylko na pytanie 3 (różnica z innym repozytorium github).
— Ruslan Kabalin

5
Nic nie odróżnia „oryginalnego repozytorium github” od jakiegokolwiek innego zdalnego repozytorium. A może coś nie rozumiem?
— dbyrne

Kiedy wypróbowałem to z git 2.7.4 "git diff master foobar / master" nie pokazał różnic. Wygląda na to, że porównuje moją lokalną kopię („master”) z repozytorium podanym jako pierwszy argument („master”) i tam porównuje tylko „ścieżkę / plik” „foobar / master”. Ale polecenie "diff foobar / master" działało dla mnie, porównując mojego lokalnego mastera z foobar / master.
— user2081279

Zamiast fetch(nr. 2) jako alternatywa: git remote update- zaktualizuje wszystkie twoje oddziały ustawione na śledzenie zdalnych, ale nie będzie łączyć żadnych zmian; lubgit pull
— Timo

49

Kolejna odpowiedź na twoje pytania (zakładając, że jesteś na master i już wykonałeś polecenie „git fetch origin”, aby poinformować repozytorium o zdalnych zmianach):

1) Zatwierdzenia w oddziale zdalnym od momentu utworzenia oddziału lokalnego:

git diff HEAD...origin/master

2) Zakładam, że przez "kopię roboczą" masz na myśli swój lokalny oddział z kilkoma lokalnymi zatwierdzeniami, które nie są jeszcze zdalne. Aby zobaczyć różnice w tym, co masz w lokalnym oddziale, ale to nie istnieje w zdalnym oddziale:

git diff origin/master...HEAD

3) Zobacz odpowiedź dbyrne.


Dziękuję za HEAD..origin/masterskładnię! Otrzymywaliśmy błędy z nieistniejącym źródłem / HEAD, a to rozwiązało problem.
— Dan Bechard

@ruslan: co to znaczy, że git diff HEAD...origin/masternic nie zwraca, jeśli sklonowałem zdalny katalog, do którego mam uprawnienia do wprowadzania zmian?
— Mona Jalal

Wystąpił błąd podczas klonowania za pomocą GUI systemu Windows, dlatego zastanawiam się, czy klon przeszedł całkowicie. Widzę, że foldery znajdują się w moim katalogu, ale chcę się upewnić, że są takie same jak zdalne. Jednak w powłoce git, git diff nic nie zwraca. Nie wiem, czy mój klon się powiódł, czy nie?
— Mona Jalal

@MonaJalal oznacza to, że od sklonowania go nie ma żadnych wcześniejszych zmian.
— Ruslan Kabalin

21

Ten przykład może komuś pomóc:

Uwaga „ origin” to mój alias dla zdalnego „Co jest na Githubie„
Uwaga ” mybranch„ to mój alias dla mojej gałęzi „co jest lokalne”, który synchronizuję z github -
nazwa twojej gałęzi to „master”, jeśli nie została utworzona jeden. Jednak używam innej nazwy, mybranchaby pokazać, gdzie jest używany parametr nazwy gałęzi.


Czym dokładnie są moje zdalne repozytoria na Github?

$ git remote -v
origin  https://github.com/flipmcf/Playground.git (fetch)
origin  https://github.com/flipmcf/Playground.git (push)

Dodaj „inne repozytorium github tego samego kodu” - nazywamy to widelcem:

$ git remote add someOtherRepo https://github.com/otherUser/Playground.git

$git remote -v
origin  https://github.com/flipmcf/Playground.git (fetch)
origin  https://github.com/flipmcf/Playground.git (push)
someOtherRepo https://github.com/otherUser/Playground.git (push)
someOtherRepo https://github.com/otherUser/Playground.git (fetch)

upewnij się, że nasze lokalne repozytorium jest aktualne:

$ git fetch

Zmień niektóre rzeczy lokalnie. powiedzmy plik ./foo/bar.py

$ git status
# On branch mybranch
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   foo/bar.py

Przejrzyj moje niezatwierdzone zmiany

$ git diff mybranch
diff --git a/playground/foo/bar.py b/playground/foo/bar.py
index b4fb1be..516323b 100655
--- a/playground/foo/bar.py
+++ b/playground/foo/bar.py
@@ -1,27 +1,29 @@
- This line is wrong
+ This line is fixed now - yea!
+ And I added this line too.

Zatwierdź lokalnie.

$ git commit foo/bar.py -m"I changed stuff"
[myfork 9f31ff7] I changed stuff
1 files changed, 2 insertions(+), 1 deletions(-)

Teraz jestem inny niż mój pilot (na github)

$ git status
# On branch mybranch
# Your branch is ahead of 'origin/mybranch' by 1 commit.
#
nothing to commit (working directory clean)

Porównaj to z pilotem - twoim widelcem: (często się to robi z git diff master origin )

$ git diff mybranch origin
diff --git a/playground/foo/bar.py b/playground/foo/bar.py
index 516323b..b4fb1be 100655
--- a/playground/foo/bar.py
+++ b/playground/foo/bar.py
@@ -1,27 +1,29 @@
- This line is wrong
+ This line is fixed now - yea!
+ And I added this line too.

(naciśnij przycisk git, aby zastosować je do pilota)

Czym różni się moja zdalna gałąź od zdalnej gałęzi głównej?

$ git diff origin/mybranch origin/master

Czym moje lokalne rzeczy różnią się od zdalnej gałęzi głównej?

$ git diff origin/master

Czym moje rzeczy różnią się od forka innej osoby, głównej gałęzi tego samego repozytorium?

$git diff mybranch someOtherRepo/master

5
Zanim zrobimy „git diff”, myślę, że konieczne jest wykonanie „git fetch”, aby upewnić się, że nasza lokalna kopia pilota jest aktualna.
— Don,

1
Przeczytałem może 20 postów na temat porównywania zdalnego i lokalnego. Właśnie to odkryłem: najpierw WYMAGANE jest pobieranie git. git jest naprawdę kodem asemblera RCS. Jezus. Dzięki za potwierdzenie, Don!
— Terence Parr,

właśnie dodałem git fetchdo tej odpowiedzi.
— FlipMcF,

1
Hummm ... Nie podoba mi się, jak użyłem „myfork” jako nazwy mojej gałęzi. To mogłoby kogoś zmylić (jak ja, który właśnie wrócił po tę odpowiedź)
— FlipMcF

Edytowano - przejrzystość i odpowiedź na pytanie
— ``
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.