2013-03-31 19 views
19

Próbuję odświeżać i zgniatać wszystkie moje zatwierdzenia z bieżącej gałęzi do opanowania. Oto, co usiłuję zrobić:Git: Jak dokonać ponownej bazy i squasha, aby przejść z gałęzi do mistrza?

git checkout -b new-feature 

zrobić parę zatwierdzeń, po tym starałem:

git rebase -i master 

w tym przypadku zobowiązuje pozostanie w new-feature oddziału

git checkout master 
git rebase -i new-feature 

Daje mi i edytować okno z komunikatem noop.

wiem o poleceniu:

git merge --squash new-feature 

Ale Obecnie pracuję na uczenie dowodzenia rebase.

Odpowiedz

4

Podczas przeklasyfikowania Git nie przenosi zatwierdzeń do innej gałęzi. Przeniesie oddział, w tym wszystkie jego zatwierdzenia. Jeśli chcesz uzyskać zatwierdzenie do wzorca po ponownym umieszczeniu na nim, użyj polecenia git merge <branch tip or commit of branch>, aby szybko przekazać gałąź master do tego zatwierdzenia.

45

Pozwala przejść przez kolejne kroki.

1 - Tworzymy nową funkcję oddziału

git checkout -b new-feature 

2 - Teraz można dodawać/usuwać i aktualizacja co chcesz na swojej nowej gałęzi

git add <new-file> 
git commit -am "Added new file" 
git rm <file-name> 
git commit -am "Removed a file" 
cat "add more stuff to file" >> <new-file> 
git commit -am "Updated files" 

3 - Następnie wybrać i squash każde zobowiązuje się do przesłania jednego miłą wiadomość o zatwierdzeniu:

git rebase -i master 

Kluczową sprawą, o której trzeba pamiętać, jest aby zmienić tekst, który mówi "wybierz" i "squash" dla wszystkich zatwierdzeń po pierwszym zatwierdzeniu. Spowoduje to zgrupowanie wszystkich zatwierdzeń do twojej głównej gałęzi.

4 - Wybierz oddział główny

git checkout master 

5 - Przesuń głowę i gałąź master gdzie nowa-funkcja jest:

git rebase new-feature 

można spróbować wszystkich poleceń w tym narzędzie wizualne: http://pcottle.github.io/learnGitBranching/

+5

Prawdopodobnie pojawi się komunikat "nie można zgnieść bez wcześniejszego zatwierdzenia". http://stackoverflow.com/questions/2563632/how-can-i-merge-two-commits-into-one – backdesk

+0

Fajnie ... chociaż zwykle będę zgniatać moje commity 'git rebase -i HEAD ~ ##' before "pull-rebase' git pull --rebase origin master "Po prostu lubię robić to w dwóch krokach, co pozwala mi przejrzeć przed/po rebase. – Tracker1

+1

Ta odpowiedź jest bardziej odpowiednia niż wybrana – fernandopasik