2013-06-19 9 views
15

Wir befinden uns in der Situation, wo Master hat neue Funktion arbeiten, und feature1 (die abgezweigt Master) ist der stabile Master. Wie können wir Dinge so verändern, dass sie "Orte tauschen"? Das heißt, Feature1 wird Master und Master wird newfeature Branch?Swap ein Master und ein Feature-Zweig

Ich fand ein paar ähnliche SO Fragen, aber in diesen Fällen kümmerte sie sich nicht mehr um die alten Master-Commits. Hier wollen wir den aktuellen Master als neuen neuen Funktionszweig erhalten.

Ich habe gedacht eine Art und Weise, dies zu tun:

  1. erstellen newfeaturebranch aus dem aktuellen Meister.
  2. Zurücksetzen/Löschen von Commits von Master zurück zu Feature1 's Verzweigungspunkt.
  3. Merge feature1 in Master.
  4. Zweig löschen feature1.

Antwort

20

Sie können Zweige umbenennen:

git branch -m master newfeaturebranch 
git branch -m feature1 master 
+0

Interessant. Und dann kann ich diese zu einer Fernbedienung (Github) schieben, und es wird einfach funktionieren? – Dogweather

+0

Da der neue Master * ahead * des alten Masters ist, wird Git sich nicht beschweren (es wird sich nur beschweren, wenn man nicht schnell vorspulen kann). Da der 'newfeaturebranch' einen komplett neuen Zweignamen hat, der noch nicht auf der Fernbedienung vorhanden ist, sollte dies genauso funktionieren. Nur wenn Sie eine Verzweigung aktualisieren möchten, bei der die Commits "entfernt" werden, müssten Sie * forcieren, indem Sie 'git push -f' verwenden. – poke

+0

Danke, das hat super funktioniert.Beide alten Zweige hatten gleichzeitige Verpflichtungen, und so war eine Kraft notwendig. Aber diese Operation ist zu erwarten: Ich habe auch "Archiv" -Zweige von jedem der Originale erstellt, nur für den Fall, dass etwas schief gelaufen ist. – Dogweather

0

EDIT: Dieser Beitrag wurde geschrieben, bevor Sie Ihre Frage bearbeiten, als Sie sagten, dass Sie einfach 'Orte tauschen' wollen. Wenn Sie Namen nicht behalten müssen, ist Pokes Lösung genug.


Sie benötigen einen dritten Zweig tmp, wie Variablen in der Programmierung Swapping:

  • git checkout -b tmp master: Schalter auf neue tmp Zweig erstellt von master
  • git branch -D master: löschen Zweig master
  • git checkout -b master feature1: Erstelle master von feature1
  • git branch -D feature1: löschen Zweig feature1
  • git checkout -b feature1 tmp: neu newfeaturebranch von tmp (das ist, wo master ganz am Anfang war)
+1

Sie sollten nicht verwenden, um die Großbuchstaben "-D" -Flag, wenn Sie es nicht explizit benötigen. '-d' ist genug. – poke

+1

Wenn er die Namen behalten möchte, könnte er 'newfeaturebranch' in' feature1' umbenennen, also ist Pokes Lösung "bedingungslos". – Angstrom

Verwandte Themen