2013-06-19 21 views
15

Znaleźliśmy się w sytuacji, w której master ma nową funkcję pracy, a cecha1 (która rozgałęziona master) jest stabilnym wzorcem. Jak możemy zmienić rzeczy, aby "wymieniać miejsca"? To znaczy, funkcja 1 staje się wzorcem, a master staje się newfeaturebranch?Zamień wzorzec i gałąź funkcji

Znalazłem kilka podobnych pytań SO, ale w tych przypadkach nie dbały już o stare mistrzowskie zobowiązania. Tutaj chcemy zachować obecnego mistrza jako nowy nowy element.

myślałem o jednym ze sposobów aby to zrobić:

  1. Tworzenie newfeaturebranch z obecnego mistrza.
  2. Przywróć/usuń zatwierdzenia z master wróć do cecha1 - punkt rozgałęzienia.
  3. Scalenie cecha1 w wzorzec.
  4. Usuń oddział feature1.

Odpowiedz

20

Można zmienić nazwę oddziały:

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

Interesujące. A potem mogę je przekazać do zdalnego (Github), a to po prostu zadziała? – Dogweather

+0

Ponieważ nowy mistrz jest * na przodzie * starego mistrza, Git nie będzie narzekał (będzie narzekał tylko wtedy, gdy nie możesz go szybko przewinąć do przodu). Podobnie, ponieważ 'newfeaturebranch' jest zupełnie nową nazwą gałęzi, która jeszcze nie istnieje na pilocie, powinno to również działać. Tylko wtedy, gdy chcesz zaktualizować gałąź, w której zatwierdzenia są "usuwane", musisz * wymusić wypychanie * za pomocą 'git push -f'. – poke

+0

Dzięki, to działało świetnie.Oba stare oddziały miały równoczesne działania, więc potrzebna była siła. Ale tej operacji należy się spodziewać: Stworzyłem także "archiwum" każdego z oryginałów, na wszelki wypadek, gdyby coś poszło nie tak. – Dogweather

0

EDYCJA: Ten wpis został napisany przed edytowaniem pytania, kiedy mówisz, że chcesz po prostu "wymienić miejsca". Jeśli nie potrzebujesz zachować nazw, rozwiązanie Poke wystarczy.


Trzeba trzeci oddział tmp, podobnie jak zamiana zmiennych w programowaniu:

  • git checkout -b tmp master: przełącznik na nowy tmp oddział utworzony z master
  • git branch -D master: usuwanie gałęzi master
  • git checkout -b master feature1: odtworzyć master z feature1
  • git branch -D feature1: usuwanie Rozgałęzienie feature1
  • git checkout -b feature1 tmp: odtworzenie newfeaturebranch z tmp (czyli tam, gdzie master było na samym początku)
+1

Nie należy używać wielkie litery '-D', jeśli nie potrzebujesz tego. Wystarczy '-d'. – poke

+1

Jeśli chce zachować nazwy, może zmienić nazwę 'newfeaturebranch' na' feature1', więc rozwiązanie Poke jest "wystarczająco" bezwarunkowe. – Angstrom

Powiązane problemy