2012-04-17 4 views
7

Ich habe mehrere Zweige und habe ein Commit A entdeckt, das einen Fehler in das System einführte. Dies wurde später durch Commit B in einer der Filialen festgelegt und wieder zum Master zusammengeführt, aber zu dieser Zeit wurde es nicht für alle beleidigenden Filialen ausgewählt.Zeigen Sie alle Zweige an, für die ein Commit ausgeführt wurde A ist aktiviert und Commit B ist nicht aktiviert?

Ich frage mich, ob es einen Befehl gibt, der alle beleidigenden Zweige zeigt, die Commit A haben, aber Commit B nicht haben?

Ich habe mit dem folgenden, um festzustellen, dass ein auf einem Zweig existiert begehen

$ git branch -r --contains=A 

aber ich mag versuchen und zu diesem Add etwas wie

$ git branch -r --contains=A ^--contains=B 

Als Randnotiz aufzunehmen Ich habe überprüft und es gibt keine anderen Commits, die die gleiche Änderung enthalten, dh es wurde nicht in andere Zweige übernommen, aber einige Zweige haben Commit B, wo sie vom Master seit der Zusammenführung abweichen und einige nicht wo Sie existierten bereits bevor Commit B war Intr hergestellt. Die Möglichkeit, nach mehreren Commits zu suchen, wäre auch nützlich, wenn das Commit, das ein Problem behoben hat (Commit B in diesem Fall), auf mehrere Zweige verteilt wird, die bereits verschiedene Commit-SHAs geben.

Antwort

3

Haben Sie versucht:

diff <(git branch -r --contains=A) <(git branch -r --contains=B) 

Es bei weitem nicht perfekt, aber es könnte helfen.

+0

Hallo, Das sieht so aus, als könnte es sehr nah sein, wie du sagst es ist nicht perfekt. Könnten Sie einige Details dazu angeben, was das Folgende bedeutet? Diff <() <() ' – Cellze

+1

Dieser Link erklärt, was' diff <() <() 'tut: http://crashingdaily.wordpress.com/2008/03/ 06/diff-two-stdout-streams/Es funktioniert möglicherweise nur mit BASH. –

+0

'comm' Befehl (d. H.' Comm -23') sollte nützlich sein für das, was Sie tun. – antak