2012-05-14 16 views
8

Es gibt eine Datei in unserem Git Repository in Arbeit, ich möchte herausfinden, wer diese Datei in einen Zweig zusammengeführt hat.Wie finden Sie heraus, wer eine git-commit in einen Zweig zusammengeführt hat?

Ich habe den Commit-Hash, der die Festschreibung identifiziert (sagen wir 552a976f1a25f9bad57efb9455e951f6b7b3367f), die die Datei eingeführt hat, und ich weiß, dass die Datei in der Verzweigung staging ist.

Wie kann ich den Hash des Commits finden, der die obige Commit in den Zweig staging zusammengeführt hat? Ich möchte den Benutzer, der zusammengeführt wurde, und das Datum der Zusammenführung finden.

+0

War es eine tatsächliche Zusammenführung (im Gegensatz zu einer Fast-Forward-Zusammenführung)? Und kannst du nicht 'git log path/to/the/file' (oder' gitk') benutzen? – svick

+0

git log zeigt den Namen der Person, die die Datei festgeschrieben hat. Ich möchte herausfinden, wer diesen Commit in den Staging-Zweig übernommen hat. –

Antwort

1
git log <commit-id>..<branch> --ancestry-path --merges --reverse 

werden Sie die Liste der Verschmelzungen zu erkunden, die seit den <commit-id> passierte, die Sie interessiert sind und die aktuelle Stand von die <branch>. Abhängig von Ihrem Zusammenführungs-Workflow ist die gewünschte Zusammenführung möglicherweise die erste in der Liste oder eine der nächsten.

Es wird hilfreich sein, den relevanten Teil der Geschichte zu visualisieren mit

git log --oneline --graph --decorate --ancestry-path --boundary <commit-id>..<branch> 

Geben Sie für Ihre <commit-id> am unteren Rand des Graphen (wird es gehören zu „Graph Grenze“ - markiert mit o statt *) .

1
git log -1 --merges <hash> 

zeigt das jüngste merge Protokoll begehen, da die <hash> (einschließlich sich selbst) begehen.

+1

Dies ist eine ziemlich gute Lösung, manchmal ist die Zusammenführung die erste Zusammenführung, aber nicht immer. In meinem Fall war es die zweite Zusammenführung, an der ich interessiert war. –

+0

'git log ' zeigt Ihnen Commits ** vor ** , nicht nach (d. H. Es zeigt die Vorfahren von ). Also zeigt dieser Befehl die letzte Zusammenführung * vor * Ihrem Commit, nicht die Zusammenführung, die ihn zum Hauptzweig brachte. –

2

branches

Wenn ich Sie richtig verstehe, haben Sie C5 und C6 Sie suchen. Wenn es der Fall ist, suchen Sie wahrscheinlich dafür:

git rev-list --merges HEAD --not <hash> --reverse 

Es wird Ihnen die Liste der Merge-Commits, die zufällig nach dem Hash begehen. Ich benutze HEAD in diesem Befehl zu glauben, dass Sie auf master, in dem Beispiel, oder staging in Ihrer Situation sind.

In einer nicht allzu komplexen Umgebung sind Sie wahrscheinlich zum ersten Zusammenführung suchen, die nach dem passiert begehen ... Aber wenn Sie nicht diese Art von Chance haben, können Sie versuchen:

git log --graph --decorate HEAD...<hash>^ 

Or jedes grafisches Werkzeug, um Ihre Geschichte (wie gitk) ...