2010-08-31 10 views
11

Mój zwykły przepływ pracy z git polega na utworzeniu nowej gałęzi funkcjonalności, wykonaniu pewnych czynności z częstym zatwierdzaniem, a następnie scaleniu z powrotem w gałęzi rozwojowej, gdy funkcja działa i/lub jest stabilna.Konflikty scalania powodują zerwanie mojego komunikatu zatwierdzenia podczas zgrupowywania zatwierdzeń.

Zazwyczaj, gdy wykonuję git merge --squash feature-branch, otrzymuję komunikat "zgnieciony zatwierdzenie następnej", który automatycznie wypełnia wszystkie wiadomości zatwierdzenia z gałęzi funkcji.

Jeśli jednak wystąpią jakiekolwiek konflikty scalania (powiedzmy, że zakończyłem i połączono inną funkcję podczas pracy nad tą), tracę wszystkie moje wiadomości zatwierdzania z oddziału. Automatycznie wypełniony komunikat zatwierdzenia wypełnia konflikty, ale nie komunikaty zatwierdzania. Gdzie podziały się moje wiadomości dotyczące zatwierdzania? Czy mogę je odzyskać?

+0

Dlaczego squash w ogóle? Możesz po prostu użyć 'rebase --interactive', aby wyczyścić, jeśli uważasz, że twoje zatwierdzenie jest zbyt częste i niechlujne, następnie wykonaj normalne scalanie - w ten sposób nie tracisz historii. – Cascabel

Odpowiedz

4

To nie odpowiada bezpośrednio na twoje pytanie, ale powinieneś być w stanie uniknąć konfliktu w pierwszej kolejności.

Rozważmy robi

git rebase master topic 

przed wykonaniem seryjnej. Pomocna może być sekcja DESCTIPTION na tej stronie: http://git-scm.com/docs/git-rebase. Może to również zapobiec potrzebie squasha, ponieważ interaktywny rebase pozwoliłby ci na squashowanie wybranych przez ciebie elementów.

EDIT: Zobacz także: In git, what is the difference between merge --squash and rebase?

+0

Zdecydowanie nie potrzebowałbyś scalania squasha w tym momencie - byłoby to szybkie przewijanie do przodu. – Cascabel

1

Nic nie jest stracone z git. Wykaz zatwierdzeń na gałęzi funkcji można uzyskać za pomocą:

git cherry feature-branch 

po prostu rury to do git cat-file:

git cherry feature-branch | cut -f2 -d' ' | git cat-file --batch 

Trzeba oczyścić się wyjście chociaż. Nie wiem, jak to zautomatyzować.

7

Tak, można uzyskać squash popełnić wiadomość powrotem. Jest przechowywany w .git/SQUASH_MSG.

Można go używać jako szablonu za pomocą następującego polecenia:

git commit -t .git/SQUASH_MSG 
+2

Z jakiegoś powodu nie działało to dla mnie bezpośrednio, ale dzięki za wskaźnik do '.git/SQUASH_MSG' :) –

+0

Uruchomiłem polecenie' git commit --file .git/SQUASH_MSG' i utworzyłem komunikat o zatwierdzeniu wszystkie zatwierdzenia w ramach zatwierdzenia "zgniecenia". – Abdull

Powiązane problemy