2013-04-23 3 views
28

Ich habe zwei Zweige. Inszenierung und Beta. Staging hat Code (einschließlich Dateien), den ich gar nicht möchte. Wie kann ich Staging vollständig überschreiben, so dass keine dieser Dateien oder Code von Staging in Beta zusammengeführt werden.Wie kann ich einen entfernten Zweig in einen anderen Zweig überschreiben, nicht zusammenführen?

Ich sehe einige Leute empfehlen, dies zu tun:

git checkout staging 
git merge -s ours beta 

Aber ich glaube nicht, dass die bereits vorhandenen Dateien ein „Code Konflikt“ und würden daher nicht entfernt werden. Liege ich falsch? Wenn ich recht habe, wie würde ich das schaffen?

+0

Steht "Staging" vor "Beta"? Was ist genau die Beziehung zwischen Ihren zwei Filialen? – Rerito

+0

Sie haben beide einige Daten, die voraus sind. Aber ich will nichts auf Staging. – Trip

Antwort

29

Sie einfach können staging löschen und neu erstellen, basierend auf beta:

git branch -D staging 
git checkout beta 
git branch staging 
+1

Ich dachte auch darüber nach, aber wir haben nicht genug Informationen über die Filialen. Ich nehme an, dass das OP diese Frage nicht gestellt hätte, wenn er nur seinen Zweig entfernen müsste: – Rerito

+0

@Rerito: Ich stimme nicht zu. Manchmal sehen die Leute einfach nicht die einfache Lösung. –

+0

Das Entfernen des Zweiges würde seine Geschichte jedoch zerstören? – Trip

8

Ich schlage vor, Sie es einfach umbenennen, falls Sie Ihre Meinung ändern.

git branch -m staging staging_oops 
git checkout beta 
git branch staging 

Wenn Sie wirklich nicht, dass zusätzliche Zweig stehen kann, die sich um:

git branch -D staging_oops 
22

Wenn Sie nicht über die alte Geschichte von staging egal, man kann es nur neu:

git checkout beta 
git branch -f staging 

Wenn Sie über die alte Geschichte von staging kümmern, dann Sache s mehr Spaß:

git checkout staging  # First, merge beta into staging so we have 
git merge -s theirs beta # a merge commit to work with. 

git checkout beta   # Then, flip back to beta's version of the files 

git reset --soft staging # Then we go back to the merge commit SHA, but keep 
          # the actual files and index as they were in beta 

git commit --amend   # Finally, update the merge commit to match the 
          # files and index as they were in beta. 
+0

Dies würde unerwünschte Dateien löschen, die kürzlich auf Staging erstellt wurden? – Trip

+0

@Trip Da der Index wieder genau auf "Beta" zurückgesetzt wird, sollte alles, was nicht in der Beta war, gelöscht werden, solange Git betroffen ist. – Amber

+2

Leider ist 'git merge -s theirs' in neueren Versionen von Git nicht verfügbar, daher funktioniert das nicht genau so wie geschrieben. – James

0

Wenn die Geschichte der Staging wird kein Problem sein, können Sie dies tun.

git checkout staging 
git reset --hard beta 

Denken Sie daran, die Geschichte der Inszenierung nach dem obigen Befehl wird verschwunden sein und Inszenierung wird die Arbeit Ihrer Beta Zweig haben.