2009-08-25 13 views
139

Mögliche Duplizieren:
Using Git how do I find modified files between local and remoteWie kann ich eingehende Commits in Git sehen?

Wie kann ich eingehende Commits in git sehen? Oder noch besser, sehe was ich gerade git fetch/git pull ed?

Bearbeiten: Um die Frage zu klären: Jemand sagt mir, dass, um einige Korrekturen zu bekommen, ich aus ihrem Repository ziehen sollte. Mein Ziel ist es zu sehen, was ihre Änderungen sind vor Ich akzeptiere sie. git pull automatisch zusammengeführt, was nicht das ist, was ich will. git fetch wird sie ohne verschmelzen greifen, aber ich bin nicht sicher, wie, was genau zu betrachten, ich gerade gezogen. Der Grund für die ursprüngliche Formulierung ist, dass ich normalerweise verwenden Mercurial, wo der Befehl hg incoming <repo name here> — ein Befehl sein würde, für die git zu fehlen scheint ein Analogon.

Antwort

149

incoming isn Es ist eine ziemlich direkte Zuordnung in Git, weil Sie (und ich tue es oft) mehrere Repos haben, aus denen Sie ziehen, und jedes Repo hat mehrere Zweige.

Wenn es ein Äquivalent von hg des eingehenden Befehl wäre, würde es wahrscheinlich sein:

git fetch && git log ..origin/master 

Das heißt, „greifen all die Sachen aus dem Upstream gehen, und dann meine aktuellen Zweig gegen die Vergleichs- vorgelagerter Masterzweig. "

Ähnlich scheidenden wäre dies:

git fetch && git log origin/master.. 

In der Praxis tippe ich die, die gerade von Hand (auch wenn ich einen Alias ​​für einen von ihnen erstellt wurde), weil es einfach ist, viele Ortsvereine haben Tracking und sein verfolgt von vielen entfernten Niederlassungen und haben keine Probleme, es zusammen zu halten.

+6

Sie können auch 'git diff --stat origin/master' verwenden, um den diffstat zu sehen, den' git pull' nach erfolgreicher Zusammenführung zeigt. –

+1

Vielen Dank für diese Antwort @Dustin! Könnte ich fragen, ich verstehe die Magie hinter "log. Origin/master" nicht ganz. Was bedeuten die Punkte? – gideon

+0

Es ist nicht so viel Magie, es wird in der Übersicht für 'git log' gezeigt und als zweite Option im Optionsbereich der [man man page] beschrieben (http://schacon.github.com/git/git-log). html), was dann zum Dokument [gitrevisons] (http://schacon.github.com/git/gitrevisions.html) führt, das viel ausführlicher wird. – Dustin

1

Es gibt keine so genannten "eingehenden Commits", die Benutzer lokal committen und sie pushen. Ich würde gitx oder gitk öffnen (das kommt mit git) und schau dir an, wie die Repos aussehen ... Ich denke, das wird dir eine klare Sicht geben.

verwenden: gitk --all zu sehen.

+0

Bitte beachten Sie meine geklärte Frage. –

+0

Ahh, ich verstehe, was du jetzt meinst, Dustins Antwort ist tot. Danke für mehr Details. –

10

Sie möchten vielleicht den Unterschied zwischen zwei Repositories untersuchen. Angenommen Sie haben einen lokalen Zweig ‚Master‘ und ein Remote-Tracking-Zweig ‚origin/master‘ haben, wo andere Leute ihren Code zu begehen, können Sie verschiedene Statistiken über die Unterschiede der beiden Zweige erhalten:

git diff --summary master origin/master 

git diff --stat master origin/master 

git diff --numstat master origin/master 

git diff --dirstat master origin/master 

git diff --shortstat master origin/master 

git diff --name-only master origin/master 

git diff master origin/master 
+1

Frage geht nicht um das diff zu sehen, es geht darum, die Commits zu visualisieren und ziehen, dass der Benutzer getan hat. –

+1

Stimmt, aber ich fühle mich, als wäre Netzpirat nah dran; Wenn das mir Protokolle statt Diffs zeigen würde, wäre es perfekt. –

80

Sie können auch in git whatchanged interessiert sein, die einen guten Überblick über Veränderungen gibt, die in einem gewissen Bereich von Commits gemacht wurden.

Wenn Sie überprüfen möchten, was Sie zu ziehen sind dabei zu, machen einen git fetch ersten, die nur lokalen Tracking-Zweig für die Remote-Repository aktualisiert (und nicht von Ihre Filialen), und verwenden Sie dann einen Befehl, der zeigt, Sie die neuen Commits, die Sie ziehen werden.Zum Beispiel:

git whatchanged ..origin 

Dies ist eine Abkürzung für die Commits zeigen, die zwischen „dem gemeinsamen Vorfahren, wo ich jetzt bin und Herkunft“ durch „Ursprung“.

+0

ahh, ich mag das besser als mit git log –

6

Wenn Ihnen jemand sagt, dass Sie ziehen sollen, erhalten Sie die Repo-URL und einen Zweig (standardmäßig master).

ich gerade tun

git fetch URL branch 

von einem gefolgt (in der Reihenfolge ihrer Präferenz fallend):

# note 3 dots in next 3 commands 
gitk HEAD...FETCH_HEAD 
    # shows all commits on both sides since the "fork" point 
gitk --cherry-pick HEAD...FETCH_HEAD 
    # as above but skips identical patches so you really see the differences 
git log --graph --boundary --left-right --cherry-pick --decorate HEAD...FETCH_HEAD 
    # I have a nice alias for this; it's the text mode eqvt of the above 

Ich benutze auch "tig" manchmal, aber diese spezifische usecase (Sehen sowohl Seiten) ist nicht gut von tig bedient.

jedoch, wenn Sie es auf zwei Punkte bringen (was Ihre eigentliche Frage eng mehr entsprechen kann, obwohl ich immer noch lieber die 3 Punkt-Versionen), können Sie

tig HEAD..FETCH_HEAD 

Hier sind die Aliase für die Bequemlichkeit:

incoming = !sh -c 'git fetch && git log --graph --boundary --left-right --cherry-pick --decorate HEAD..FETCH_HEAD' 
outgoing = !sh -c 'git fetch && git log --graph --boundary --left-right --cherry-pick --decorate FETCH_HEAD..HEAD' 
Verwandte Themen