2013-11-03 11 views
19

Ich habe ein Remote-Repository, das ich gezogen habe und verzweigen bin. Ich möchte den neuen Zweig mit Änderungen am Master auf dem Laufenden halten. Ich denke über den folgenden Workflow nach, macht es Sinn oder gibt es bessere Möglichkeiten, dies zu tun?Einen Zweig auf dem neuesten Stand mit Master halten

  1. Initial Verzweigung und Kasse:

    git checkout master 
    
    git pull 
    
    git checkout -b my_branch 
    
  2. einige Arbeit in my_branch tut, dann in regelmäßigen Abständen:

    git checkout master 
    
    git pull 
    
    git checkout my_branch 
    
    git merge master --no-ff 
    

Wiederholen Sie Schritt 2 je nach Bedarf, mit periodischen Schüben auf dem Fernbedienung my_branch.

Dann, wenn Sie bereit für eine Zusammenführung zurück:

git checkout master 

git merge my_branch --no-ff 

Ton ok?

Antwort

16

Sie Ihre Befehle vereinfachen können:

1.

git fetch 
git checkout -b my_branch origin/master 

2.

git fetch 
git merge origin/master 

git fetch aktualisiert Ihre Remote-Niederlassungen gibt es in der Regel keine Notwendigkeit, eine lokale Kopie eines Zweiges, wenn Sie nicht sind Planung, um an dieser Branche zu arbeiten.

Sie können die --no-ff nach der Einstellung git config --global merge.ff false weglassen.

git help config sagt:

merge.ff 
     By default, Git does not create an extra merge commit when merging 
     a commit that is a descendant of the current commit. Instead, the 
     tip of the current branch is fast-forwarded. When set to false, 
     this variable tells Git to create an extra merge commit in such a 
     case (equivalent to giving the --no-ff option from the command 
     line). When set to only, only such fast-forward merges are allowed 
     (equivalent to giving the --ff-only option from the command line). 

Beachten Sie, dass git pull ist nur eine Kombination von git fetch und git merge.

Normalerweise möchten Sie nur git pull --rebase, die im Wesentlichen git fetch plus git rebase ist, und erstellt eine viel sauberere Geschichte.

Gibt es einen Grund für Ihre "periodischen Pushs"? Wenn niemand sonst in der gleichen Branche arbeitet, wäre das völlig in Ordnung, nur um alles zu erledigen.

+0

Danke für Ihre (und Christoph) Antwort. Um Ihre Frage zu beantworten, gibt es keinen Grund für die periodischen Stöße, außer als Backup für den Fall, dass meine Box stirbt. Und für den Fall, dass jemand möchte, dass mein Code seine eigene Arbeit mit-- nicht ganz wahrscheinlich, bis mein Code Master wird, und eine Rebase auf einer öffentlichen Filiale kann zu Schwierigkeiten führen, so verstehe ich (aber bin mir nicht sicher, warum genau .) – larryq

+1

Rebases sind ein zweischneidiges Schwert. Auf der einen Seite führen sie oft zu einer viel klareren Geschichte. auf der anderen Seite erstellen sie völlig neue Commits mit grundsätzlich dem alten Inhalt. Wenn Sie Ihre Commits schieben, könnte jemand anders (theoretisch) ihre eigenen Änderungen an diesen Commits vornehmen. Wenn Sie sich später dazu entscheiden, Ihre Commits neu zu setzen, machen Sie grundsätzlich die alten Commits und alle darauf basierenden Änderungen ungültig. - Auch wenn Sie Ihren alten Zweig entfernen, kann der andere Ihre Änderungen übernehmen und somit auch Ihre alten Änderungen übernehmen, was zu doppelten Commits und einem resultierenden Chaos führt. :) – michas

+1

Nochmals vielen Dank. Ich habe über 'git pull --rebase 'gelesen und bin nicht zu 100%, was passiert, wenn ich es momentan in (sagen wir)' my_branch' nenne. In diesem Fall zieht der Befehl von der "my_branch" -Fernbedienung und dann gegen ... welche Verzweigung? Nicht Master, nehme ich an, da ich es nirgendwo im Kommando erwähnt habe. Also muss es gegen 'my_branch' rebasieren, was für mich ein wenig komisch klingt, da ich immer zwei getrennte Zweige rebasiert habe. Aber ich nehme an, es ist möglich, und jetzt, wo ich darüber nachdenke, warum nicht? – larryq

8

Ich würde empfehlen, einen Rebase-Workflow zu verwenden. Anstatt also git pull zu verwenden, sollten Sie git pull --rebase verwenden.

Ich würde das gleiche mit dem Feature-Zweig tun. Anstatt also eine git merge master --no-ff zu machen, würde ich eine git rebase master verwenden. Wenn der Feature-Zweig jedoch während der Entwicklung mit Kollegen geteilt werden soll, ist es besser, den Master-Zweig regelmäßig in den Feature-Zweig zu integrieren.

Aber um ehrlich zu sein, arbeite ich an einem kleinen Team und wenn wir zusammen an einem Feature-Zweig arbeiten müssen und wir müssen es mit dem Master updaten, dann unterbrechen wir unsere Arbeit für einen kurzen Moment (und kommunizieren der Prozess klar), Rebase auf Master und Kraft drücken Sie den Feature-Zweig. Aber ja, das skaliert nicht für größere Teams. Ich finde es jedoch viel bequemer, mit einem Feature-Zweig zu arbeiten, der auf Master basiert, anstatt sich mit Merges vom Master zu befassen.

Stellen Sie sicher, dass Sie dies lesen.

Git workflow and rebase vs merge questions

Verwandte Themen