2009-09-09 14 views
98

Rozpocząłem pracę nad tym, co uważałem za drobną poprawkę błędów w moim głównym oddziale. Jednakże, wymknął się spod kontroli do punktu, w którym chciałbym stworzyć oddzielną gałąź, aby w ogóle opracować program.Wszystkie moje zmiany w bieżącym oddziale i przenieś je do nowego oddziału w Git

Więc teraz, co chciałbym zrobić, to:

  1. Utwórz nowy oddział o nazwie (powiedzmy) „krawędź”
  2. przenieść wszystkie zmienione/Nieśledzone plików na pana do krawędzi (tak, że mistrz jest niezmieniona od kiedy zacząłem poprawkę bug)
  3. skończyć prace nad krawędzią, łączyć z powrotem do pana

Jak mogę to zrobić?

Odpowiedz

93

Jeśli nie popełniłeś jeszcze nic, jesteś już we właściwej pozycji.

  1. Tworzenie nowego oddziału: git checkout -b edge
  2. Twoje pliki nie uległy zmianie. Tylko git add, co trzeba i jak zwykle zatwierdzić.
  3. Po zakończeniu zatwierdzania na edge przełącz się ponownie na master z git checkout i git merge edge.
+0

nie popełnił niczego jeszcze tak, że pierwsza linia była mile wzrok ... Uff, to było całkiem bezbolesny :-) – Ryan

86

Aby dodać odpowiedź JB, jeśli masz już zaczął tworzyć kilka zobowiązuje na pana za to, co skończyło się jak bycie „krawędź” wysiłek, można:

git stash 
git checkout -b edge master 
git branch -f master SHA1_before_your_commits 
git stash apply 
+0

obwoluta zapas nie jest to bezwzględnie konieczne, ale tylko dla niezatwierdzonych zmian roboczych, prawda? – HaveAGuess

+4

@HaveAG w prawo. Przez "weź wszystkie moje zmiany" dodałem również bieżące, jeszcze nie dodane zmiany. Stąd skrytka. – VonC

+1

dziękuję (głosował w górę) – HaveAGuess

13

Jeśli próbują przenieść pracę z master do gałęzi, która już istnieje, ale jest za mistrzem, git nie pozwoli ci przełączyć się do innej gałęzi. W tym przypadku, to zrobić:

git stash 
git checkout oldBranch 
git merge master 
git checkout master 
git stash apply 
git checkout oldBranch 
Powiązane problemy