2013-10-16 9 views
5

Wie funktioniert die git branch -r --no-merged?Wie funktioniert git --no-merged option

Wird überprüft, ob alle Commits in einem Zweig bereits im ursprünglichen übergeordneten Zweig vorhanden sind?

Und was ist mit Cherry Picks? Ist es schlau genug zu sagen, dass ein Commit von 1 Zweig bereits in den ursprünglichen Stammzweig zurückgekehrt ist?

Und wenn ein Zweig bereits zusammengeführt wurde und neue Commits hinzugefügt wurden, wird dieser Zweig als nicht zusammengeführt ausgewählt?

+1

Haben Sie die Manpage gelesen? es heißt "Nur Zweige auflisten, deren Tipps vom angegebenen Commit aus nicht erreichbar sind" – Hasturkun

Antwort

10

Nun, dass die Kommentare von @Hasturkun sagt alles ehrlich zu sein, aber Sie haben drei Fragen:

1. es sehen Prüft, ob alle in einem Zweig begehen bereits im ursprünglichen Stammhaus?

Nicht versuchen, sich zu wiederholen @Hasturkun Zitat sagt: "Nur Zweige, deren Tipps sind nicht erreichbar von der angegebenen Commit".

In diesem speziellen Fall denke an den Git Tree von Commits als eine U-Bahn-Karte. Sie können nur rückwärts von einem Knoten zum nächsten reisen.

master : - - - -0 
        \ 
branchA :   E - - - - F - - - - G 

Wenn auf master Sie laufen git branch --no-merge und die manuelle Seitendefinition zu nehmen? Kannst du G (die Spitze von branchA) von master HEAD erreichen, commit 0? Nein, können Sie nicht, also wird branchA als nicht zusammengeführtes Zweig aufgeführt.

Wie wäre es, wenn Sie git branch --no-merge aus dem HEAD von branchA laufen (commit G)? Wird master ein nicht-gemischter Zweig sein? Nein, es wird als ein verschmolzener Zweig betrachtet, der in dem obigen Beispiel trivial zu verstehen ist.

Wie wäre es mit diesem Beispiel?

master : - - - -0 
        \ 
branchA :   E - - - - F - - - - G - - - Z 
           \    /
branchB :      Y - - - W - - - 

Output git Zweig läuft in allen drei Zweigen --no-fusionierte:

master 
    branchA 
    branchB 
branchA (nothing) 
branchB (nothing) 

2. Und was Kirsche Picks? Ist es schlau genug zu sagen, dass ein Commit von 1 Zweig bereits in den ursprünglichen Stammzweig zurückgekehrt ist?

Cherry-Picks erzeugen ein komplett anderes Commit, also benutze ich sie nur, wenn ich wirklich muss. Da es sich um eine ganz andere begehen schafft, unterscheiden sich die Bäume:

Schauen Sie sich das Experiment nur habe ich, betrachten Meister und branchA gleich:

Experience 1) fusionieren Mit

(master)$ touch empty && git add . && git commit -am "File Added" 
(master)$ checkout branchA 
(branchA)$ git branch --no-merged 
    master 
(branchA)$ git merge master 
(branchA)$ git branch --no-merged 
    // outputs nothing 

Experience 2 Mit) Kirsche-Pick

(master)$ touch empty && git add . && git commit -am "File Added" 
(master)$ checkout branchA 
(branchA)$ git branch --no-merged 
    master 
(branchA)$ git cheery-pick <commitID from above> 
(branchA)$ git branch --no-merged 
    master 

3. und wenn ein Zweig bereits verschmolzen worden ist und neue Commits wurden, werden hinzugefügt Wählen Sie diesen Zweig als nicht verschmolzen?

Ja, wegen aller oben genannten.

+0

Vielen Dank für die ausführliche Antwort – DarVar