Was ist der beste Weg, um ein Protokoll der Commits für einen Zweig zu erhalten, seit dieser von dem aktuellen Zweig verzweigt wurde? Meine bisherige Lösung lautet:
git log $(git merge-base HEAD branch)..branch
Die Dokumentation für git-diff gibt an, dass dies git diff A...B
äquivalent zu ist git diff $(git-merge-base A B) B
. Andererseits gibt die Dokumentation für git-rev-parse an, dass r1...r2
definiert ist als r1 r2 --not $(git merge-base --all r1 r2)
.
Warum sind diese unterschiedlich? Beachten Sie, dass git diff HEAD...branch
ich die gewünschten Unterschiede habe, aber der entsprechende Befehl git log gibt mir mehr als das, was ich will.
Nehmen wir in Bildern Folgendes an:
x --- y --- z --- Zweig /. --- a --- b --- c --- d --- e --- KOPF
Ich möchte ein Protokoll mit den Commits x, y, z erhalten.
git diff HEAD...branch
gibt diese Commits- Jedoch
git log HEAD...branch
gibt x, y, z, c, d, e.
Antworten:
Im Rahmen einer Revisionsliste
A...B
wird diesegit-rev-parse
definiert. git-log erstellt eine Revisionsliste.git-diff
nimmt keine Liste von Revisionen entgegen - es dauert eine oder zwei Revisionen und hat dieA...B
Syntax so definiert, dass sie bedeutet, wie sie in dergit-diff
Manpage definiert ist . Wenngit-diff
dies nicht explizit definiert wirdA...B
, ist diese Syntax ungültig. Beachten Sie, dass diegit-rev-parse
ManpageA...B
im Abschnitt "Festlegen von Bereichen" beschrieben wird und alles in diesem Abschnitt nur in Situationen gültig ist, in denen ein Revisionsbereich gültig ist (dh wenn eine Revisionsliste gewünscht wird).Versuchen Sie
git log HEAD..branch
(zwei Punkte, nicht drei), um ein Protokoll zu erhalten, das nur x, y und z enthält . Dies ist identisch mitgit log branch --not HEAD
und bedeutet, dass alle Commits in Zweigen ausgeführt werden, die nicht in HEAD enthalten sind.quelle
git diff HEAD..branch
ist identisch mitgit diff HEAD branch
. Das Wichtigste dabei ist, dass das Protokoll eine Liste / einen Bereich von Revisionen enthält, während dies bei diff nicht der Fall ist. Deshalb behandeln sie ihre Argumente anders.git diff HEAD...branch
(drei Punkte) der Ausgabe vongit log HEAD..branch
macht genau das, was Sie fragen, wenn Sie in der sind
master
Branche sind.Ich mag auch sehr:
Was nicht genau das ist, was Sie fragen, aber im selben Kontext immer noch sehr nützlich ist.
quelle
git cherry
ist in der Tat sehr nützlich. Danke :)gif-diff
:git diff x..z
oder für mein eigenes Beispiel istgit diff 13bc4d..8eda3a
.Was Sie sehen möchten, ist die Liste der ausgehenden Commits. Sie können dies mit tun
oder
Wobei ich annehme, dass "branchName" als Tracking-Zweig von "master" erstellt wurde.
Um die eingehenden Änderungen anzuzeigen, können Sie Folgendes verwenden:
quelle
Dies ähnelt der Antwort, die ich auf gepostet habe: Vorschau eines Git-Pushs
Fügen Sie diese Funktionen in Ihr Bash-Profil ein:
Sie können dies wie folgt verwenden:
Dies funktioniert mit jedem Zweig.
quelle
Ähnlich wie bei einigen Antworten wie Alex Vs und NDavis, aber keine davon ist ganz gleich.
Wenn bereits in der betreffenden Branche
Verwenden von:
Welches kombiniert mehrere Funktionen:
Aktualisieren:
Dies sollte wahrscheinlich sein
git diff master
, aber auch dies zeigt den Unterschied, nicht die Commits als die angegebene Frage.quelle
git co master; git pull
den Zweig seit dem Erstellen erstellt haben, istgit diff master
es nicht sinnvoll, die Unterschiede NUR durch Commits in dem angegebenen Zweig einzuführen.git diff <branch1>...<branch2>
Zeigt die Änderungen an, die von eingeführt wurdenbranch2
.Wirf ein -p hinein, um einige DATEIÄNDERUNGEN zu sehen
Machen Sie einige Aliase:
Sehen Sie sich die eindeutigen Commits einer Niederlassung an:
quelle
So zeigen Sie das Protokoll der aktuellen Verzweigung seit der Verzweigung vom Master an:
git log master...
Wenn Sie sich derzeit auf dem Master befinden, können Sie das Protokoll eines anderen Zweigs anzeigen, seit dieser vom Master abgezweigt wurde:
git log ...other-branch
quelle
(3dots) aber manchmal zeigt es '+' anstelle von '='
quelle
ich fand
Nützlicher, da Sie nicht nur die Commit-Nachrichten erhalten, sondern den gesamten Unterschied. Wenn Sie sich bereits in der Verzweigung befinden, in der Sie die Änderungen von sehen möchten und (zum Beispiel) sehen möchten, was sich am Master geändert hat, können Sie Folgendes verwenden:
quelle