git diff tra repository remoto clonato e originale


170

Ho clonato un repository github e non ho apportato modifiche localmente. Il repository Github è andato avanti con commit sullo stesso ramo.

  1. Come trovo un diff tra il mio repository locale e il repository github originale?
  2. Come trovo un diff tra la mia copia di lavoro e il repository github originale?
  3. Come trovo un diff tra il mio repository locale e un altro repository github dello stesso progetto?


1
@CiroSantilli 新疆 改造 中心 六四 事件 法轮功: Penso che sia sufficientemente diverso: l'altra domanda si pone su qualsiasi ramo remoto generico, mentre questo è con riferimento a GitHub, oltre a tre diversi punti di partenza. Sono decisamente simili, quindi il tuo link è sicuramente utile.
jvriesem,

Risposte:


161

1) Aggiungi eventuali repository remoti che desideri confrontare:

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

2) Aggiorna la tua copia locale di un telecomando:

git fetch foobar

Recupera non cambierà la tua copia di lavoro.

3) Confronta qualsiasi ramo dal tuo repository locale con qualsiasi telecomando che hai aggiunto:

git diff master foobar/master

Avrò bisogno di Git Fetch prima di diff? Immagino che non ci sia modo di diff senza di esso.
Oleg Proudnikov

Questa è in realtà una risposta alla sola domanda 3 (diff con un altro repository github).
Ruslan Kabalin

5
Nulla distingue il "repository github originale" da qualsiasi altro repository remoto. O sto fraintendendo qualcosa?
dbyrne,

Quando l'ho provato con git 2.7.4 il "git diff master foobar / master" non ha mostrato differenze. Mi sembra che paragona la mia copia locale ("master") con il repository dato come primo argomento ("master") e qui differisce solo il "percorso / file" "foobar / master". Ma il comando "diff foobar / master" ha funzionato per me, confrontando il mio master locale con foobar / master.
user2081279

Invece di fetch(n. 2) in alternativa: git remote update- aggiornerà tutti i tuoi rami impostati per tenere traccia di quelli remoti, ma non unirà alcuna modifica; oppuregit pull
Timo,

49

Un'altra risposta alle tue domande (supponendo che tu sia il padrone e abbia già fatto "git fetch origin" per renderti repo consapevole delle modifiche remote):

1) Impegna su filiale remota da quando è stata creata la filiale locale:

git diff HEAD...origin/master

2) Presumo che per "copia di lavoro" intendi la tua filiale locale con alcuni commit locali che non sono ancora sul telecomando. Per vedere le differenze di ciò che hai sul tuo ramo locale ma che non esiste nell'esecuzione di un ramo remoto:

git diff origin/master...HEAD

3) Vedi la risposta di dbyrne.


Grazie per la HEAD..origin/mastersintassi! Abbiamo riscontrato errori con origin / HEAD inesistenti e questo ha risolto il problema.
Dan Bechard,

@ruslan: cosa significa quando git diff HEAD...origin/masternon restituisce nulla se ho clonato una directory remota a cui sono autorizzato ad apportare modifiche?
Mona Jalal,

Si è verificato un errore durante la clonazione tramite la GUI di Windows, quindi mi chiedo se il clone sia passato completamente. Vedo che le cartelle sono qui nella mia directory ma voglio assicurarmi che siano le stesse di remote. Comunque in git shell, git diff non restituisce nulla. Sono confuso se il mio clone ha avuto successo o no?
Mona Jalal,

@MonaJalal significa che non ci sono cambiamenti a monte da quando lo hai clonato.
Ruslan Kabalin,

21

Questo esempio potrebbe aiutare qualcuno:

Nota " origin" è il mio alias per il remoto "Cosa c'è in Github"
Nota " mybranch" è il mio alias per il mio ramo "che cosa è locale" che sto sincronizzando con github - il
tuo nome di ramo è 'master' se non hai creato uno. Tuttavia, sto usando un nome diverso mybranchper mostrare dove viene utilizzato il parametro del nome del ramo.


Quali sono esattamente i miei repository remoti su github?

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

Aggiungi l '"altro repository github dello stesso codice" - lo chiamiamo fork:

$ 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)

assicurati che il nostro repository locale sia aggiornato:

$ git fetch

Cambia alcune cose localmente. diciamo file ./foo/bar.py

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

Rivedi le mie modifiche non confermate

$ 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.

Impegnare localmente.

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

Ora sono diverso dal mio telecomando (su github)

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

Diff questo con telecomando - il tuo fork: (questo viene spesso fatto con 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.

(git push per applicarli al telecomando)

In che modo il mio ramo remoto differisce dal ramo principale remoto?

$ git diff origin/mybranch origin/master

In che modo le mie cose locali differiscono dal ramo principale remoto?

$ git diff origin/master

In che modo le mie cose differiscono dal fork di qualcun altro, ramo principale dello stesso repository?

$git diff mybranch someOtherRepo/master

5
Prima di fare un 'git diff', penso che sia necessario fare un 'git fetch' per assicurarsi che la nostra copia locale del telecomando sia aggiornata.
Don

1
Ho letto forse 20 post su come confrontare remoto e locale, l'ho appena capito: git fetch è RICHIESTO per primo. git è veramente il codice assembly di RCS. Gesù. Grazie per aver confermato, Don!
Terence Parr,

appena aggiunto git fetcha questa risposta.
FlipMcF,

1
Hummm ... Non mi piace come ho usato "myfork" come nome del mio ramo. Ciò potrebbe confondere qualcuno (come me, che è appena tornato per questa risposta)
FlipMcF

Modificato: chiarezza e risposta alla domanda n. 3 sulla differenza di forcella
FlipMcF,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.