Für Änderungen, die in Merge-Commits versteckt sind
Beim Zusammenführen von Commits werden die Änderungen automatisch in der Git-Protokollausgabe ausgeblendet. Sowohl die Spitzhacke als auch die umgekehrte Schuld fanden die Änderung nicht. Die gewünschte Zeile wurde also hinzugefügt und später entfernt, und ich wollte die Zusammenführung finden, die sie entfernt hat. Der Dateiverlauf git log -p -- path/file
zeigte nur, dass er hinzugefügt wurde. Hier ist der beste Weg, den ich gefunden habe, um es zu finden:
git log -p -U9999 -- path/file
Suchen Sie nach der Änderung und suchen Sie dann rückwärts nach "^ commit" - das erste "^ commit" ist das Commit, bei dem die Datei zuletzt diese Zeile hatte. Das zweite "^ commit" erfolgt nach dem Verschwinden. Das zweite Commit ist möglicherweise dasjenige, das es entfernt hat. Das-U9999
soll den gesamten Dateiinhalt anzeigen (nach jedem Ändern der Datei), vorausgesetzt, Ihre Dateien bestehen aus maximal 9999 Zeilen.
Findet alle zugehörigen Zusammenführungen über Brute Force (differenziert jedes mögliche Zusammenführungs-Commit mit seinem ersten Elternteil, läuft gegen Tonnen von Commits)
git log --merges --pretty=format:"git diff %h^...%h | grep target_text" HEAD ^$(git merge-base A B) | sh -v 2>&1 | less
(Ich habe versucht, den Revisionsfilter stärker einzuschränken, bin jedoch auf Probleme gestoßen und empfehle dies nicht. Die von mir gesuchten Änderungen zum Hinzufügen / Entfernen betrafen verschiedene Zweige, die zu unterschiedlichen Zeiten zusammengeführt wurden und A ... B nicht enthalten waren wann die Änderungen tatsächlich in die Hauptzeile übernommen wurden.)
Zeigen Sie einen Git-Baum mit diesen beiden Commits (und entfernen Sie einen Großteil des komplexen Git-Verlaufs):
git log --graph --oneline A B ^$(git merge-base A B)
(A ist das erste Commit oben, B ist das zweite Commit oben)
Zeige die Geschichte von A und die Geschichte von B minus die Geschichte von A und B.
Alternative Version (scheint den Pfad eher linear als den regulären Git-Verlaufsbaum anzuzeigen - ich bevorzuge jedoch den regulären Git-Verlaufsbaum):
git log --graph --oneline A...B
Drei, nicht zwei Punkte - drei Punkte bedeuten "r1 r2 - nicht $ (Git-Merge-Basis - alle r1 r2). Dies ist die Menge von Commits, die entweder von r1 (linke Seite) oder r2 (rechts) erreichbar sind Seite), aber nicht von beiden. " - Quelle: "man gitrevisions"
git log -S<string> /path/to/file
dass ein-c
oder-cc
auch Entfernungen während der Zusammenführung (Konflikte)