2008-08-22 17 views
98

Może być więcej niż jeden sposób, aby zadać to pytanie, więc tutaj jest opis problemu. Pracowałem nad mistrzem i popełniłem kilka rzeczy, a następnie zdecydowałem, że chcę wstrzymać tę pracę. Zrobiłem kilka poprawek, a potem rozgałęziłem się, zanim zacząłem swoją pracę. Praktycznie to działa dobrze, po prostu mam teraz inną gałąź jako moją główną gałąź rozwojową. Zastanawiam się, jak mogę zmienić sytuację, więc pracuję ponownie nad mistrzem, ale nie ma mojej roboty śmieciowej i powiedziałem, że praca jest w innej branży.Zmiana nazw gałęzi w git

Kilka sposobów, które można zadać/rozwiązać: Jak zmienić nazwę mojego oddziału głównego na coś innego, a następnie zmienić nazwę czegoś innego do opanowania? Jak utworzyć kopię zapasową wzorca, a następnie spowodować, że wszystkie zatwierdzone kopie zapasowe, które zostały zapisane w przeszłości, znajdują się w innej gałęzi?

Dzięki za wszystkie (szybkie) odpowiedzi! Wszystkie są dobre.

Odpowiedz

140

W uzupełnieniu do innych uwag, można znaleźć -m (ruchu) przełącznik git branch pomocne. Można zmienić nazwę starego mistrza na coś innego, a następnie zmień swój nowy oddział do opanowania:

git branch -m master crap_work 
git branch -m previous_master master 
+1

Działa to również podczas zmiany nazwy bieżącej gałęzi! :) – Tarrasch

+0

W zależności od obiegu pracy możesz również zmienić odniesienia do gałęzi w pliku .git/config. Zmieniłem '[branch" crap_work "]', aby odczytać '[branch" master "], aby master nadal synchronizował się z' origin/master'. Oczywiście stan tych dwóch transakcji był taki, że to wciąż miało sens. – Eponymous

+1

To nie zmienia nazwy oddziałów na zdalnym repozytorium, tylko w lokalnym repo. – smohadjer

8

To jest stosunkowo proste:

git checkout -b fake_master master # fake_master now points to the same commit as master 
git branch -D master    # get rid of incorrect master 
git checkout -b master real_master # master now points to your actual master 
git checkout master    # optional -- switch on to your master branch 
+1

yeap, ostatni jest całkowicie opcjonalna - 'git checkout -b' tworzy branch ** i ** powoduje, że jest aktywny. – incarnate

15

Start na master utworzyć oddział o nazwie in-progress, a następnie zresetować master do wcześniejszego zatwierdzenia.

$ git branch in-progress 
$ git reset --hard HEAD^ 
+1

Nie widzę powodu, dla którego zostałby odrzucony. Zrobiłem to sam kilka razy, zanim dowiedziałem się o filii -m i uświadomiłem sobie, że mistrz nie jest niezmiennie związany jako stała nazwa oddziału. – skiphoppy

32

myślę, że należy rozważyć inną strategię rozwoju, aby uniknąć problemów takich jak ten. Najlepszym dla mnie rozwiązaniem jest to, aby nigdy nie tworzyć bezpośrednio w mojej głównej gałęzi. Niezależnie od zmian robię, zawsze utworzyć nowy oddział dla nowego kodu:

 
git checkout -b topic/topic_name master 

Stamtąd mogę wypchnąć zmiany repozytoriów publicznych:

 
git push pu topic/topic_name 

lub ewentualnie po prostu łączą to widok z mojego głównego oddziału:

 
git checkout master && git merge topic/topic_name 

Jeśli naprawdę trzeba wrócić do starszej momencie i ustawić, że jako swojego mistrza, można zmienić nazwę bieżącego oddziału do czegoś innego, a następnie sprawdzić starsza wersja być twoim panem:

 
git branch -m master junk 
git co -b master old_sha1_value 
+0

To dobra polityka. I pomyśl o tym, widziałem to praktykowane gdzie indziej. Dzięki. – Rimian

0

Spowoduje to ustawienie swojego pana do dowolnego punktu w jednym kroku:

git checkout -B master new_point