2012-03-29 13 views
9

Mam oddział "główny" i kilka gałęzi tematycznych. Załóżmy, że gałąź główna jest używana przede wszystkim jako kandydat do wydania, a prace rozwojowe nie są wykonywane w tej gałęzi.Rebasing po połączeniu squasha?

Branże tematyczne są kilka i są udostępniane przez zespół. Niektóre z oddziałów pracują nad nimi więcej niż jeden programista. Wszystkie gałęzie tematyczne są regularnie rebased z gałęzi głównej.

Aby wyczyścić historię w gałęzi "master", wykonałem "git merge --squash" podczas łączenia kodu z tematu na gałęzie główne. To działało idealnie dobrze.

Teraz - kiedy gałęzie tematyczne są ponownie tworzone - zatwierdzenia są duplikowane. Czy istnieje sposób na wyczyszczenie zatwierdzeń w gałęziach tematów po pomyślnym zakończeniu "git merge --squash"?

+0

Nie będzie działać idealnie dobrze w przypadku [usuniętych plików] (http://stackoverflow.com/a/14343784/281545). Może nie do zrobienia - patrz [tutaj] (http://stackoverflow.com/questions/1464642/git-merge-squash-repeatedly) –

Odpowiedz

7

Załóżmy masz następujący scenariusz:

A - B - C (master) 
\ 
    D - E (topic) 

Jeśli połączyć wątek do pana z --squash dostaniesz coś takiego

A - B - C - F (master) 
\ 
    D - E (topic) 

Gdzie F zawiera wszystkie zmiany z D i E Przekazywanie tematu na master nie ma sensu, ponieważ gałąź tematu jest już w master (przez F). Zamiast przekierowywania możesz przenieść gałąź tematu na F, np.

git checkout master 
git branch -f topic F 

co daje:

A - B - C - F (master/topic) 

Wszystko, co musisz teraz zrobić, to push up Przeniesiony temat Branża:

git push -f origin topic 
+0

Dzięki! Dokładnie to, czego potrzebowałem. – mustard

+0

Uważaj na squasha - F może zawierać pliki usunięte w gałęzi tematów, zobacz http://stackoverflow.com/a/14343784/281545 –

3

kiedyś zrobić to samo, co Magnus tylko z para więcej poleceń:

git checkout master 
git merge --squash topic 
git commit -m "Add topic feature" 

git branch -D topic 
git checkout -b topic 

git push -f origin topic 
Powiązane problemy