2011-11-21 9 views
23

Powiel możliwe:
How can I squash my last X commits together using git?Git: Najprostszym sposobem na zgniecenia zobowiązuje pana

Mam projektu hostowane na GitHub i mam lokalny klon. Mam ładunek małych commitów, które już podjąłem do GitHub. Wszystko to zostało zrobione przy użyciu domyślnego * głównego oddziału.

Pomyliłem się między scalaniem - przesuwaniem a podstawą itp. Jaki jest najprostszy sposób połączenia kilku historycznych zatwierdzeń w jednym zatwierdzeniu, aby przesunął się do GitHub?

Odpowiedz

43

Przed rozpoczęciem należy upewnić się, że git status jest czyste (tj. Nie ma danych wyjściowych z tego polecenia), aby uniknąć utraty pracy. Najprostszym sposobem, aby robić to, co chcesz, to prawdopodobnie:

git reset --soft <LAST-COMMIT-THAT'S-OK> 
git commit -m 'Many squashed commits' 
git push --force origin master 

Należy pamiętać, że jest to przepisywanie historii (dlatego trzeba wybrać opcję do git push--force), więc należy unikać tego, czy ktoś mógłby sklonowany lub wyciągnięte z repozytorium. Dla niektórych więcej alternatyw, patrz na to pytanie, a jego odpowiedź:

+2

Jakie są następstwa robi to regularnie czy inne gałęzie wyciągnąć z repo (Przewijanie do przodu tylko)? – Gabe

+1

@whoami: Jeśli ktoś inny wyciągnie gałąź, zobaczy "' (wymuszona aktualizacja) ', a git nie będzie chciał zaktualizować swojej gałęzi. Następnie muszą (a) upewnić się, że cała ich praca została zatwierdzona (b) zazwyczaj albo do rebase (np. Z 'git rebase origin/master') albo zresetować ich gałąź do wersji oddziału zdalnego śledzenia, która właśnie została zaktualizowana (np. z 'git reset --hard origin/master'). Jeśli nie jesteś zadowolony z wyjaśniania ludziom, co mają robić, zdecydowanie lepiej nie zmuszać do przepchnięcia przepisanej historii. –

+0

Wszyscy zobaczą, że ich lokalne oddziały i pilot odłączyły się i będą musiały scalić zmiany zamiast po prostu szybko przewinąć do przodu. –

Powiązane problemy