Frage

Ich habe einen alten Zweig, die Ich mag würde löschen. Doch bevor dies zu tun, mag ich überprüfen, ob alle gemacht Commits zu diesem Zweig waren irgendwann in einen anderen Zweig verschmolzen. So würde Ich mag alle meine aktuellen Zweig Commits gemacht, um zu sehen, die nicht auf andere Zweig angewendet worden [oder, wenn dies ohne einige scripting nicht möglich ist, wie man alle Commits in einem Zweig sieht, die nicht angewandt worden sind zu einem anderen bestimmten Zweig?].

War es hilfreich?

Lösung

Sie wahrscheinlich nur wollen

git branch --contains branch-to-delete

Damit werden alle Zweige Liste, die die Festschreibungen von „Branch-to-delete“ enthalten. Wenn es meldet mehr als nur „Branch-to-delete“ hat sich die Niederlassung zusammengeführt.

Ihre Alternativen sind wirklich nur rev-Liste Syntax Dinge. z.B. git log one-branch..another-branch zeigt alles, was one-branch braucht, alles zu haben another-branch hat.

Sie können auch in git show-branch als eine Möglichkeit, daran interessiert zu sehen, was dort.

Andere Tipps

eine Liste Um zu sehen, von denen Commits auf einem Zweig, aber nicht eine andere, verwenden Sie git log:

git log --no-merges oldbranch ^newbranch

... das heißt, zeigen Protokolle verpflichten für alle auf oldbranch verpflichtet, die nicht auf newbranch. Sie können mehrere Zweige Liste aufzunehmen und ausschließen, z.

git log  --no-merges oldbranch1 oldbranch2 ^newbranch1 ^newbranch2

Hinweis: unter Windows ^ ist eine Escape-Taste, so muss es mit einem anderen ^ maskiert werden:

git log --no-merges oldbranch ^^newbranch

Um die Commits in oldbranch zu zeigen, aber nicht in newbranch:

git log newbranch..oldbranch

Um die diff durch diese Commits zu zeigen (man beachte, gibt es drei Punkte):

git diff newbranch...oldbranch

Hier ist die doc mit einer Diagrammdarstellung https: // git -scm.com/book/en/v2/Git-Tools-Revision-Selection#Commit-Ranges

Für diejenigen, die noch für eine einfache Antwort suchen Besuche git cherry . Es vergleicht tatsächliche Diffs anstelle Hashes begehen. Das heißt, es Commits bietet Platz für die gewesen Kirsche gepflückt haben oder indexiert.

Sie zuerst den Zweig Kasse Sie löschen möchten:

git checkout [branch-to-delete]

dann git Kirsche verwenden, um es zu einem Hauptentwicklungszweig zu vergleichen:

git cherry -v master

Beispiel Ausgabe:

+ 8a14709d08c99c36e907e47f9c4dacebeff46ecb Commit message
+ b30ccc3fb38d3d64c5fef079a761c7e0a5c7da81 Another commit message
- 85867e38712de930864c5edb7856342e1358b2a0 Yet another message

. Hinweis: Der -v Flag ist die Commit-Nachricht zusammen mit der SHA Hashwert schließen

Zeilen mit dem ‚+‘ vor sind in der Branche zu löschen, aber nicht der Master-Zweig. Diejenigen mit einem '-' vor einem äquivalenten haben begehen in Master

.

Für nur die Commits, die nicht in Master sind, kombinieren Kirsche pflücken mit grep:

git cherry -v master | grep "^\+"

Beispiel Ausgabe:

+ 8a14709d08c99c36e907e47f9c4dacebeff46ecb Commit message
+ b30ccc3fb38d3d64c5fef079a761c7e0a5c7da81 Another commit message

Während einige der hier gepostet Antworten finden, was Sie suchen, der folgende Unterbefehl von git branch ist eine geeignetere Lösung für Ihre Aufgabe.

- verschmolzen wird verwendet, um alle Zweige zu finden, die sicher gelöscht werden kann, da diese Zweige voll von HEAD enthalten sind.

Während in master könnte man den Befehl ausführen, um die Zweige aufzuzählen man sicher entfernen können, etwa so:

git branch --merged
  develop
  fpg_download_links
* master
  master_merge_static

# Delete local and remote tracking branches you don't want
git branch -d fpg_download_links
git push origin :fpg_download_links
git branch -d master_merge_static
git push origin :master_merge_static

# There is also a flag to specify remote branches in the output
git branch --remotes --merged

jimmyorr Antwort funktioniert nicht unter Windows. es hilft --not statt ^ wie so zu verwenden:

git log oldbranch --not newbranch --no-merges

Wenn es ein (single) Niederlassung, die Sie brauchen, um zu überprüfen, zum Beispiel, wenn Sie diesen Zweig ‚B‘ wollen, ist vollständig in den Zweig ‚A‘ verschmolzen, können Sie einfach wie folgt vor:

$ git checkout A
$ git branch -d B

git branch -d <branchname> hat die Sicherheit, dass "Der Zweig muss vollständig in HEAD zusammengeführt werden."

Achtung: : dies tatsächlich löscht den Zweig B, wenn es in A zusammengeführt wird

.

Sie können dieses einfache Skript Commits zu sehen, die nicht zusammengeführt werden

#!/bin/bash
# Show commits that exists only on branch and not in current
# Usage:
#   git branch-notmerge <branchname>
#
# Setup git alias
#   git config alias.branch-notmerge [path/to/this/script]
grep -Fvf <(git log --pretty=format:'%H - %s') <(git log $1 --pretty=format:'%H - %s')

Sie können mit auch Werkzeug git-wtf diesem Zustand der Filialen wird angezeigt

Starten Sie auf Erstellen Sie eine Pull-Request über den git Hosting-Service Sie verwenden. Wenn der Zweig wurde in die Basiszweig vollständig verschmolzen, werden Sie nicht in der Lage sein, die neuen PR zu erstellen.

Sie brauchen nicht wirklich, um die Pull-Anforderung zu machen, benutzen Sie einfach den ersten Schritt, wo Sie Zweige pflücken.

Zum Beispiel auf GitHub:

  

Es gibt nichts zu vergleichen

Dies verwendet nicht git auf der Kommandozeile, aber ich finde es oft hilfreich, die anderen Werkzeuge zur Verfügung, mit einem klaren mentalen Modell zu verwenden, anstatt einem anderen obskuren git Befehl zu erinnern zu versuchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top