Anzeigen von Commits, die direkt in einem Zweig vorgenommen wurden, Ignorieren von Zusammenführungen in Git

86

Gibt es bei Verwendung von git eine Möglichkeit, Commits für einen Zweig anzuzeigen, während alle Commits ignoriert werden, die durch Zusammenführen eingegeben wurden?

Ich versuche, die Codeänderungen zu überprüfen, die an einem Zweig vorgenommen wurden, während ich diejenigen ignoriere, die wir an anderen Zweigen vorgenommen haben, die zusammengeführt wurden. Ich weiß, dass es fast unmöglich ist, einen Unterschied auf diese Weise zu zeigen, aber ich würde es gerne können Finden Sie heraus, welche Commits ich überprüfen muss.

Kanal Cat
quelle

Antworten:

123

--no-merges

Beide Elternteile haben in vielen Zusammenhängen in git das gleiche Gewicht. Wenn Sie bei der Zusammenführung anderer Änderungen immer konsequent vorgegangen sind, werden Sie möglicherweise feststellen, dass dies Ihnen das bietet, was Sie möchten.

git log --no-merges --first-parent

Andernfalls können Sie möglicherweise Commits von anderen benannten Zweigen ausschließen.

git log --no-merges ^other-branch-1 ^other-branch-2 ^other-branch-3

Wenn Sie die Änderungen überprüfen möchten, die Sie wieder in einen Hauptzweig zusammenführen möchten, ist es am einfachsten, die Zusammenführung auf einem lokalen Klon durchzuführen und dann den Diff mit dem ersten übergeordneten Element zu betrachten, bevor Sie die Zusammenführung veröffentlichen.

CB Bailey
quelle
Dieser erste Befehl eignet sich hervorragend für "richtige Verzweigung pro Feature" ( plus.google.com/109096274754593704906/posts/R4qkeyRadLR )
Adam Dymitruk
1
Es scheint, als ob ich hauptsächlich Commits von diesem Zweig bekomme, aber es werden immer noch Commits angezeigt, die vom Master gezogen wurden. Wir haben so viele Branchen, dass es unpraktisch wäre, andere auszuschließen.
Channel Cat
@ChannelCat Warum nicht Ihren Zweig auf den anderen umstellen, dann sind alle Commits am Ende?
Mark Ingram
7

Sie können dafür verwenden, git cherrydass Sie Commits finden, die noch nicht mit dem Upstream zusammengeführt wurden, oder Commits, die sich in einem Zweig befinden, aber nicht im anderen. Geben Sie also zwei Zweige mit den Namen "Ihr Zweig" und "Master" an:

git cherry -v your-branch master

zeigt Ihnen eine Liste der Commits im Vergleich zu ihrer Patch-ID:

+ c3e441bf4759d4aa698b4a413f1f03368206e82f Updated Readme
- 2a9b2f5ab1fdb9ee0a630e62ca7aebbebd77f9a7 Fixed formatting
+ e037c1d90b812af27dce6ed11d2db9454a6a74c2 Corrected spelling mistake

Sie können feststellen, dass Commits mit dem Präfix "-" in beiden Zweigen angezeigt werden, während Commits mit dem Präfix "+" nur in Ihrem Zweig verfügbar sind.

Alternativ können Sie Folgendes verwenden:

git log --pretty=format:"%h %s" your-branch..master --no-merges

Hier sehen Sie eine Liste der Commits, die in "your-branch" ausgeführt wurden und in "master" noch nicht vorhanden sind.

jbochniak
quelle
Da mein Versuch, Ihre Antwort zu bearbeiten, abgelehnt wurde, werde ich ihn hier veröffentlichen: In Ihrer letzten Git-Zeile sollten drei Punkte und nicht zwei zwischen den Namen der Zweige stehen. So: Ihr Zweig ... Meister
Vedranm
@vedranm Du brauchst keine 3 Punkte, nur zwei ... obwohl 3 genauso funktioniert wie 2.
Zzzach ...
4

Ein sehr hackiger Weg:

git log --graph --oneline --no-merges thebranch|grep '^\*'

fge
quelle