Suchen Sie alle Zweige, die eine Änderung von FILENAME enthalten (auch vor dem (nicht aufgezeichneten) Verzweigungspunkt).
FILENAME="<filename>"
git log --all --format=%H $FILENAME | while read f; do git branch --contains $f; done | sort -u
Manuell prüfen:
gitk --all --date-order -- $FILENAME
Alle Änderungen an FILENAME finden, die nicht mit master zusammengeführt wurden:
git for-each-ref --format="%(refname:short)" refs/heads | grep -v master | while read br; do git cherry master $br | while read x h; do if [ "`git log -n 1 --format=%H $h -- $FILENAME`" = "$h" ]; then echo $br; fi; done; done | sort -u
git log -Schange …
oder verwendengit log --grep LOGMESSAGE …
(wobei… den Rest des von mir erwähnten Befehls darstellt).gitk --all -- filename
der Sie alle Änderungen an dieser Datei grafisch anzeigen können . Wenn Sie das betreffende Commit identifizieren können, können Sie anhand dessen feststellen,git branch --contains
in welche Zweige das Commit migriert wurde. Wenn Sie sehen möchten, in welchem Zweig das betreffende Commit ursprünglich erstellt wurde, dann googeln Sie git-what-branch. Beachten Sie jedoch, dass Zusammenführungen beim schnellen Vorlauf diese Informationen verdecken können.git log --all --format='--contains %H' "$file" | xargs git branch
Alles was Sie brauchen ist
Wenn Sie die Branche sofort kennenlernen möchten, können Sie auch Folgendes verwenden:
Wenn Sie Umbenennungen hatten, möchten Sie diese möglicherweise
--follow
für den Git-Protokollbefehl einschließen .quelle
--source
Sie dort ein hinzu und Sie sind golden.Es sieht so aus, als wäre dies immer noch ein Problem ohne eine geeignete Lösung. Ich habe nicht genug Credits, um einen Kommentar abzugeben. Hier ist mein kleiner Beitrag.
Seth Robertsons erste Lösung funktionierte irgendwie für mich, gab mir aber nur lokale Zweige, unter denen sich viele falsch positive Ergebnisse befanden, wahrscheinlich aufgrund von Zusammenschlüssen aus dem stabilen Zweig.
Die zweite Lösung von Adam Dymitruk hat bei mir überhaupt nicht funktioniert. Was ist --format =% 5 für den Anfang? Es wird von git nicht erkannt, ich konnte nichts darüber finden und ich konnte es nicht dazu bringen, mit anderen Formatoptionen zu arbeiten.
Aber seine erste Lösung in Kombination mit der Option --source und einem einfachen grep erwies sich als hilfreich:
Dies gibt mir eine Reihe von Remote-Tags und -Zweigen sowie einen lokalen Zweig, in dem ich die letzten Änderungen an der Datei vorgenommen habe. Ich bin mir nicht sicher, wie vollständig dies ist.
UPDATE gemäß der Anfrage von @nealmcb, Sortieren der Zweige nach der letzten Änderung:
Zunächst können Sie den Grep in "refs / Heads /.*" ändern, wodurch nur die lokalen Zweige angezeigt werden. Wenn es nur wenige Zweige gibt, können Sie das letzte Commit jedes einzelnen wie folgt untersuchen:
Wenn es mehr Zweige gibt und Sie dies wirklich automatisieren möchten, können Sie die beiden Befehle mithilfe von xargs, Git-Protokollformatierung und einer anderen Sortierung in diesem Einzeiler kombinieren:
Dies führt zu einer Ausgabe wie folgt:
quelle
Das Folgende ist eine unelegante Brute-Force-Methode, aber ich gehe davon aus, dass sie funktionieren sollte. Stellen Sie sicher, dass Sie alle nicht festgeschriebenen Änderungen zuerst gespeichert haben, da dadurch gewechselt wird, in welchem Zweig Sie sich gerade befinden.
quelle
git log -S
for-each-ref
dieseshort
Flagge trotzdem respektiert wird . Das heißt, ignoriere meine Antwort; Die anderen Antworten sind besser.