2015-12-14 9 views
8

Wie kann ich wissen, ob eine Verzweigung (oder ein Commit) in SourceTree zusammengeführt wird?SourceTree: Finden Sie heraus, ob eine Verzweigung zusammengeführt wird

Wenn gitk --all verwenden, ist es für eine Festschreibung zeigen (oder Zweig) foo alle anderen Branchen, in denen foo bereits in verschmolzen.

Um zu verdeutlichen, was ich meine ein Screenshot: Der eingekreiste (rot) Bereich zeigt alle Zweige, wo das aktuelle Commit Teil ist. Kann dies auch in SourceTree angezeigt werden?

Screenshot of gitk

+0

Sie kennen also einen Befehlszeilen-Weg, um es zu finden, aber möchten einen Weg finden, es in Sourcetree speziell zu tun? Ich denke nicht, dass es diese Funktion hat. – tom

+0

Ja! (Nun, gitk ist eigentlich die eingebaute git gui, aber es scheint schlechter als Source Tree nur in diesem Aspekt ...) –

Antwort

7

But maybe it is easier after all to not use SourceTree for that feature

Sie eine benutzerdefinierte Aktion verwenden können definiert in SourceTree und diese zusammen Zweige auflistet.
Das ist nicht so integriert wie gitk, aber zumindest müssen Sie das Tool nicht wechseln.

Zuerst definieren eine custom action, using $SHA for getting the selected commit:

Custom action

Es ein Skript aufrufen sollte in Ihrem %PATH% genannt git-bm (siehe this answer as an example)

#!/bin/sh 
for branch in $(git for-each-ref --format="%(refname:short)" refs/heads/); do 
    if [ "${branch}" != "$1" ]; then 
    t=$(git for-each-ref --format="%(refname:short)" --merged "${branch}" refs/heads/|grep -v "${branch}"|grep "$1") 
    if [ "${t}" != "" ]; then 
     echo "${branch}" 
    else 
     t=$(git branch --contains "$1" | grep "${branch}") 
     if [ "${t}" != "" ]; then 
     echo "${branch}"  
     fi 
    fi 
    fi 
done 

Das listet alle Zweige, von denen Sie die zugreifen können aktuelle SHA1 (also "alle Zweige, in denen der aktuelle Zweig zusammengeführt wurde")

(Hinweis: die Syntax git for-each-ref --merged wurde nur in Git 2.7.0 - 4. Januar 2016 eingeführt.Siehe zum Beispiel "Is it possible to filter out merged branches in git for-each-ref?")

Dann rufen Sie es auf dem begehen Sie wollen:

invoke custom action

Und erhalten Sie die Liste der Filialen es in verschmolzen worden:

list

Es ist ein Workaround, aber Sie verlassen SourceTree nicht.

+0

Leider fand ich heraus, dass dies nicht doch funktioniert. Ich möchte alle Zweige anzeigen, in die dieser Zweig eingebunden ist, nicht umgekehrt. (Wenn ich zum Beispiel den aktuellen Zweig in den Master einfüge, wird bei Ihrer Lösung "Master" in der Liste nicht angezeigt). Gitk tut dies richtig ... –

+0

@ JanRüegg so etwas wie (Pseudo-Syntax): 'für jeden Zweig: (git branch --merged abranch | grep currentBranch)' – VonC

+0

@ JanRüegg ich die Antwort mit einem Skript, das bearbeitet haben sollte Liste "alle Zweige, in die dieser Zweig eingebunden ist". Kannst du es testen? Es funktioniert auf meiner Seite. – VonC

7

Die äquivalente gitk --all in SourceTree laufen würde wählen Alle Branchen aus der Dropdown-Liste in der oberen linken Ecke:

View All Branches in SourceTree

Die Grafik zeigt die Zweige wurden wo verschmolzen, genau wie gitk tut.

jedoch herauszufinden genau die Zweige haben in dem aktuellen verschmolzen - das ist der Zweig, der Spitzen sind erreichbar von HEAD - mehr ist leicht von der Kommandozeile, wie man einfach sagen kann:

git branch --merged 

Wenn Sie möchten, können Sie auch entfernten Niederlassungen in der Liste enthalten, indem Sie die Option --all:

git branch --all --merged 

Herauszufinden, welche Zweige haben nicht in der aktuellen verschmolzen ist genauso einfach:

git branch --no-merged 
+0

Vielen Dank für Ihre Hilfe! Ich habe die Frage mit einem Screenshot geklärt, um zu zeigen, welchen Teil von gitk ich in SourceTree "finden" möchte. Aber vielleicht ist es doch einfacher, Quelltext für dieses Feature nicht zu verwenden, wie du es beschrieben hast ... –

+0

Wie im Kommentar zur anderen Antwort erwähnt, funktioniert das auch nicht! Ich möchte wissen, in welche Zweige der aktuelle Zweig eingebunden ist, nicht umgekehrt! –