2015-05-14 16 views
5

Do mojego projektu używam git-flow. Mam gałąź master i develop zsynchronizowaną z zdalnym repo Zwykle dla wszystkich zmian tworzę gałąź feature, edytuję pliki, zatwierdzam zmiany w gałęzi feature i zamykam gałąź z scalaniem w develop.Przenoszenie zmian w nowej gałęzi funkcji

Czasami jednak zapominam o utworzeniu gałęzi feature i edytuję pliki bezpośrednio w develop. Jak mogę przenieść puszki w nowym oddziale feature?

Odpowiedz

9

Jeśli już sprawił, że zobowiązują się do develop i historia wygląda następująco:

A---B---C---D develop 

Tutaj, C jest ostatnim prawidłowym zatwierdzeniem na develop, a D powinno zostać przypisane do gałęzi funkcji. Wykonaj następujące czynności (podczas develop):

git branch feature  # creates feature branch pointing at D 
git reset --hard C  # or HEAD^, HEAD~1, etc - resets develop back to C 

To spowoduje:

A---B---C develop 
     \ 
      D feature 

ta będzie również działać dobrze, jeśli zrobiłem więcej niż jeden popełnienia, jak można zastąpić dowolny popełnić odniesienie musisz ponownie ustawić develop w drugim poleceniu.

1

Zakładając, że te zmiany już zaangażowana lokalnie i nie zostały jeszcze wciśnięty, można użyć miękkiego resetu:

git reset --soft HEAD~1 
git checkout feature 
git commit 

Wystarczy wymienić 1 w git reset --soft HEAD~1 z liczbą zobowiązuje chcesz miękkiego resetu.

1

można użyć git ukryta za wprowadzenie zmian do nowego oddziału, zobacz git book

to w pana, po wprowadzeniu zmian (ale nie dodawać lub zobowiązać je) można zrobić:

git stash //stashes the changes 
git stash branch featurebranchname //creates a new branch and applies the stash to it 
+1

Z twojej odpowiedzi nie wynika jasno, że przed uruchomieniem polecenia 'git stash branch' musisz uruchomić' git stash'. –

+1

Wielkie dzięki, dwukrotnie sprawdziłem i zredagowałem moją odpowiedź. – wmk

Powiązane problemy