2016-05-21 13 views
1

Ich habe ein Test-Git-Projekt erstellt, um herauszufinden, wie ich die verschiedenen Protokolle zwischen zwei Zweigen erhalten soll.Git unterscheiden Protokolle zwischen zwei Zweigen

In den meisten Fällen haben wir einen solchen Fall: Zweig Master hat einige Commits Kirsche gepflückt zu meistern, unter dem Diagramm sehen: enter image description here

Das „Ich“ begehen ist Kirsche gepflückt Zweig zu meistern. Mein erwartetes Ergebnis von verschiedenen Protokollen zwischen Master und dbg_feature sollte nur "J" sein.

Aber eigentlich, wenn ich unter Befehl ausführen:

git cherry -v master dbg_feature 

ich bekommen "I" und "J", die handverlesene ein "I" nach wie vor darin Liste:

+ a1915061be2f445d322abc7bfb7d19bbb357b917 I 
+ 6486e899e07b6d6f539cbcad10655dcc345f434d J 

Wenn ich unter Befehl ausführen:

git log --oneline --no-merges master..dbg_feature 

die Ausgabe unter:

wie unten
6486e89 J 
a191506 I 

Wenn laufen git rev-list-Befehl:

git rev-list --oneline --no-merges --cherry-pick --right-only master...dbg_feature 
6486e89 J 
a191506 I 

Ergebnis das gleiche wie git log scheint.

Also, was ist der richtige Befehl, um genau die verschiedenen Logs zwischen diesen beiden Zweigen zu bekommen?

+0

cherry-pick-commits werden als neue Commits behandelt, daher denke ich, dass es unmöglich ist, so einen Unterschied zu machen, um die ausgewählten Commits herauszufiltern. Wenn alles verschmolzen ist, sollte es in Ordnung sein. – beetlej

+0

Ein bisschen seltsam, nach der Ausgabe, "I" und "J" sollte commit von dbg_feature aber nicht von Master. Außerdem hat der Master keine äquivalenten Commits zu I oder J. Wenn er eine äquivalente Commit zu I hat, sollte das + - sein. – ElpieKay

+0

@ElpieKay Ja, weil ich ausgewählt worden bin, um zu meistern, aber dieser Befehl scheint es nicht zu wissen. – lucky1928

Antwort

0

Es ist mir nicht klar, was Sie mit "different commits" meinen. Jedoch Ihre Erwähnung git cherry verwenden lässt vermuten, dass Sie sprechen, was the git rev-list documentation bezeichnet als „gleichwertig“ oder „Patch-Äquivalent“ verpflichtet (oder ihr Gegenteil, die ich und sie „inäquivalenten“ verpflichtet):

--cherry-mark

            Wie --cherry-pick (siehe unten), aber Marke gleichwertig verpflichtet mit = anstatt Weglassen sie und inäquivalenten diejenigen mit +.

--cherry-pick

            Auslassen jeder begehen, dass die gleiche Änderung führt wie ein anderer auf der „anderen Seite“ commit wenn der Satz von Festschreibungen sind mit symmetrischen Differenz beschränkt.

            Zum Beispiel, wenn Sie zwei Zweige haben, A und B, eine übliche Art und Weise alle nur die eine Seite von ihnen verpflichtet sich, zur Liste mit --left-right (siehe Beispiel unten in der Beschreibung des --left-right Möglichkeit). Es zeigt jedoch die Commits, die von der anderen Verzweigung ausgewählt wurden (beispielsweise kann "3. auf b" aus der Verzweigung A ausgewählt werden). Mit dieser Option werden solche Commit-Paare von der Ausgabe ausgeschlossen.

--left-only
--right-only

            Liste begeht nur auf der jeweiligen Seite eines symmetrischen Bereichs, das heißt solche, die nur < bzw. gekennzeichnet werden würden. > von --left-right.

            Zum Beispiel weglässt --cherry-pick --right-only A...B jene Festschreibungen von B die in A sind oder Patch-Äquivalent in A zu einer begehen. Mit anderen Worten, listet die + commits von git cherry A B auf. Genauer gesagt, --cherry-pick --right-only --no-merges gibt die genaue Liste.

--cherry

            Ein Synonym für --right-only --cherry-mark --no-merges; nützlich, um die Ausgabe auf die Commits auf unserer Seite zu begrenzen und diejenigen zu markieren, die auf der anderen Seite einer gegabelten History mit git log --cherry upstream...mybranch, ähnlich wie git cherry upstream mybranch, angewendet wurden.

Auch dies sind Argumente für den Befehl git rev-list. Da git rev-list und git log fast den gleichen Befehl sind (abgesehen von kleinen Details wie ihrem Ausgabeformat :-)), funktionieren sie auch mit git log.

+0

Vielleicht unterschiedliche Protokolle sind sinnvoller? Aktualisiert. Der Befehl "git rev-list --oneline --no-merges --cherry master..dbg_feature" scheint gleich ausgegeben zu werden.Ich und J aber nicht nur J. – lucky1928

+0

Mein Stolperstein ist das Wort "anders". Dies ist ein englisches Wort, aber als ein Wort ist es ein Verb: Fred und Bob unterscheiden sich, während Bob und Carol zustimmen. (Siehe http://www.dictionary.com/browse/differ) Wenn Sie sagen, "logs different" würde beispielsweise bedeuten, dass Sie "git log A" und "git log B" ausgeführt haben und unterschiedliche Ausgaben erhalten haben, was nicht überraschend ist scheint aber nichts mit Ihrer eigentlichen Frage zu tun zu haben. Beachten Sie in der Zwischenzeit die * wichtige Anmerkung *, dass diese 'rev-list' Flags mit der * three * dot Syntax verwendet werden sollen. – torek

Verwandte Themen