Ich habe ein Git-Repository mit mehreren Zweigen.
Wie kann ich wissen, welche Zweige bereits mit dem Hauptzweig zusammengeführt wurden?
git branch --merged master
listet Zweige auf, die zum Master zusammengeführt wurden
git branch --merged
listet in HEAD zusammengeführte Zweige auf (dh Spitze des aktuellen Zweigs)
git branch --no-merged
listet Zweige auf, die nicht zusammengeführt wurden
Standardmäßig gilt dies nur für die lokalen Niederlassungen. Das -a
Flag zeigt sowohl lokale als auch entfernte Zweige an, und das -r
Flag zeigt nur die entfernten Zweige an.
git branch --merged
und löschte dann den lokalen und den Remote-Zweig.git branch -a --merged/no-merged
funktioniert das auch, ohne dabei einen lokalen Tracking-Zweig zu erstellen.git branch -r --merged/--no-merged
nur um entfernte Filialen zu finden.--merged/--no-merged
ein optionales Festschreibungsargument erforderlich ist. Zumindest in meiner Version von git (1.9.1) führt das Hinzufügen des Flags-a
oder-r
danach zu einem schwerwiegenden Fehler. Fügen Sie das-a
oder-r
vorher hinzu--(no-)merged
.Mit dem
git merge-base
Befehl können Sie das letzte gemeinsame Commit zwischen den beiden Zweigen ermitteln. Wenn dieses Commit mit Ihrem Zweigkopf identisch ist, wurde der Zweig vollständig zusammengeführt.quelle
git branch -d
sich, einen Zweig zu löschen, der nicht mit dem aktuellen Zweig zusammengeführt wurde. Den aktuellen Zweig nicht löschen .Es gibt auch eine grafische Schnittstellenlösung. Tippe einfach
gitk --all
In einem neuen Anwendungsfenster wird eine grafische Darstellung Ihres gesamten Repos angezeigt, in der Sie leicht erkennen können, ob ein Zweig bereits zusammengeführt wurde oder nicht
quelle
git
Clients ist. Unter Ubuntu ,apt-get install gitk
.brew install git-gui
, ingitk
die Kommandozeile zu gelangen .Ich benutze die folgende Bash-Funktion wie:
git-is-merged develop feature/new-feature
quelle
Verwenden Sie
git merge-base <commit> <commit>
.Dieser Befehl findet die besten gemeinsamen Vorfahren zwischen zwei Commits. Und wenn der gemeinsame Vorfahr mit dem letzten Commit eines "Zweigs" identisch ist, können wir davon ausgehen, dass ein "Zweig" bereits mit dem Master zusammengeführt wurde.
Hier sind die Schritte
git merge-base <commit-hash-step1> <commit-hash-step2>
.Weitere Informationen zu git merge-base https://git-scm.com/docs/git-merge-base .
quelle
master
es zusammengeführt wurdebranch
, und dann wurden 4 weitere Commits hinzugefügtbranch
.git log -1 $(git merge-base base-branch feature-branch)
und wenn Siefeature-branch
in der Ausgabe sehen, dann wissen Sie, dass sie zusammengeführt werden?Zum Thema Aufräumen von Filialen
Hier wird jeder Remote-Zweig aufgelistet, gefolgt von den Remote-Zweigen, in denen sich die neuesten SHAs befinden.
Dies ist nützlich, um zu erkennen, welche Remote-Zweige zusammengeführt, aber nicht gelöscht wurden und welche nicht zusammengeführt wurden und daher verfallen.
Wenn Sie 'tig' verwenden (es ist wie gitk, aber terminalbasiert), können Sie dies
um den Commit-Verlauf eines Zweigs zu sehen, ohne die Kasse verlassen zu müssen
quelle
Um zu überprüfen, welche Zweige mit dem Master zusammengeführt werden, sollten Sie die folgenden Befehle verwenden:
git branch <flag[-r/-a/none]> --merged master
Liste aller zum Master zusammengeführten Zweige.git branch <flag[-r/-a/none]> --merged master | wc -l
Anzahl der in den Master zusammengeführten Zweige zählen.Flaggen sind:
-a
flag - (alle) zeigt entfernte und lokale Zweige an-r
flag - (remote) zeigt nur entfernte Zweige an<emptyFlag>
- zeigt nur lokale NiederlassungenBeispiel:
git branch -r --merged master
Zeigt Ihnen alle Remote-Repositorys an, die mit dem Master zusammengeführt wurden.quelle
Hier sind meine Techniken, wenn ich herausfinden muss, ob ein Zweig zusammengeführt wurde, auch wenn er möglicherweise neu basiert wurde, um mit unserem Hauptzweig auf dem neuesten Stand zu sein. Dies ist ein häufiges Szenario für Feature-Zweige.
Keiner dieser Ansätze ist narrensicher, aber ich habe sie oft als nützlich empfunden.
1 Protokoll für alle Zweige anzeigen
Verwenden Sie ein visuelles Tool wie gitk oder TortoiseGit oder einfach git log mit --all, und gehen Sie den Verlauf durch, um alle Zusammenführungen zum Hauptzweig anzuzeigen. Sie sollten erkennen können, ob dieser bestimmte Feature-Zweig zusammengeführt wurde oder nicht.
2 Entfernen Sie immer den Remote-Zweig, wenn Sie einen Feature-Zweig zusammenführen
Wenn Sie die Gewohnheit haben, beim Zusammenführen in einem Feature-Zweig immer sowohl den lokalen als auch den Remote-Zweig zu entfernen, können Sie die Fernbedienungen auf Ihrem anderen Computer einfach aktualisieren und bereinigen, und die Feature-Zweige verschwinden.
Um mich daran zu erinnern, verwende ich bereits Git-Flow-Erweiterungen (AVH Edition) , um meine Feature-Zweige lokal zu erstellen und zusammenzuführen. Daher habe ich den folgenden Git-Flow-Hook hinzugefügt, um mich zu fragen, ob ich den Remote-Zweig auch automatisch entfernen möchte.
Beispiel für einen Feature-Zweig zum Erstellen / Beenden
.git / hooks / post-flow-feature-finish
3 Suche nach Commit-Nachricht
Wenn Sie den Remote-Zweig nicht immer entfernen, können Sie dennoch nach ähnlichen Commits suchen, um festzustellen, ob der Zweig zusammengeführt wurde oder nicht. Die Gefahr hierbei besteht darin, dass der Remote-Zweig auf das nicht erkennbare zurückgesetzt wurde, z. B. das Quetschen von Commits oder das Ändern von Commit-Nachrichten.
Beispielbefehle für den Hauptzweig:
In meiner Bash .profile Konfiguration
quelle
git log --all --color --graph --decorate --topo-order --date=relative --abbrev-commit --pretty=format:"%C(green)%h %C(red bold)[%<(14)%ad] %Creset%s%Cred%d%C(blue) [%an]"
git log
Sie hinzufügen,--merges
um nur Zusammenführungs-Commits anzuzeigen. stackoverflow.com/a/25986615/134761Hier ist ein kleiner Einzeiler, der Sie darüber informiert, ob Ihr aktueller Zweig Daten von einem entfernten Ursprung / Hauptzweig enthält oder nicht:
Ich bin auf diese Frage gestoßen, als ich an einem Feature-Zweig gearbeitet habe und häufig sicherstellen wollte, dass ich die neuesten Arbeiten in meinen eigenen Arbeitszweig integriert habe.
Um diesen Test zu verallgemeinern, habe ich meiner ~ / .gitconfig den folgenden Alias hinzugefügt:
Dann kann ich anrufen:
um zu überprüfen, ob ich aktuell bin.
quelle