Próbuję zmiażdżyć szereg zatwierdzeń - HEAD to HEAD ~ 3. Czy istnieje szybki sposób, aby to zrobić, czy też muszę użyć rebase --interactive?
git
interactive
rebase
squash
Phillip
źródło
źródło
Odpowiedzi:
W takim razie upewnij się, że drzewo robocze jest czyste
źródło
git reset --soft HEAD~3 && git commit -m "my message"
git config alias.mysquash '!f(){ git reset --soft HEAD~$1 && git commit ${2:+-m "$2"}; };f'
.git mysquash 3 'some message'
zadziała, ale poprawiłem go takgit musquash 3
, że całkowicie pominie flagę -m, abygit commit
w takim przypadku uzyskać interaktywny interfejs użytkownika.Osobiście podoba mi się rozwiązanie Wilhelmtella :
Jednak utworzyłem alias z pewnym sprawdzaniem błędów, abyś mógł to zrobić:
Zalecam skonfigurowanie aliasów, które faktycznie uruchamiają skrypty, aby łatwiej było (a) kodować skrypty i (b) wykonywać bardziej złożoną pracę ze sprawdzaniem błędów. Poniżej znajduje się skrypt, który działa jak squash, a poniżej jest skrypt do konfigurowania aliasów git.
Skrypt do zgniatania (squash.sh)
Następnie, aby podłączyć ten skrypt squash.sh do aliasu git, utwórz kolejny skrypt do ustawiania aliasów git, takich jak ten ( create_aliases.command lub create_aliases.sh ):
źródło
$PATH
named,git-squash.sh
a zostanie automatycznie utworzony alias jakogit squash
. Nie zmieniłem Twojej odpowiedzi, na wypadek, gdyby był powód do użyciacreate-aiases.sh
skryptu, którego nie jestem świadomy.Aby dodać do odpowiedzi wilhelmtell , wygodnie jest wykonać miękki reset,
HEAD~2
a następnie zmienić zatwierdzenieHEAD~3
:Spowoduje to scalenie wszystkich zatwierdzeń z
HEAD~3
zatwierdzeniem i użycie jego komunikatu o zatwierdzeniu. Pamiętaj, aby zacząć od czystego drzewa roboczego.źródło
Użyłem:
Działało całkiem dobrze. Po prostu nie próbuj mieć dziennika zmian z linią zaczynającą się od „pick” :)
źródło
Użyj następującego polecenia, aby zmiażdżyć ostatnie 4 zatwierdzenia w ostatnim zatwierdzeniu:
Z aliasem:
Z https://github.com/brauliobo/gitconfig/blob/master/configs/.gitconfig
źródło
Oto jedna linijka do zgniatania ostatnich 2 zatwierdzeń. W tym przykładzie zostanie zachowana wiadomość przedostatniego zatwierdzenia. Możesz zmienić wiadomość, jak chcesz.
To polecenie będzie bardzo przydatne, jeśli utworzysz alias dla tego polecenia i zamiast niego użyjesz aliasu.
źródło
Aby zgnieść wszystko od czasu rozwidlenia gałęzi od mistrza:
źródło
--reedit-message=HEAD
użyje wiadomości z ostatniego zatwierdzenia, która nie jest częścią zgniatania . To prawdopodobnie nie jest ten, którego chcesz. Aby raczej otrzymać wiadomość o pierwszym zatwierdzeniu do dołączenia , albo (1) zastąpHEAD
hashem zatwierdzenia, którego ma dotyczyć wiadomość, albo (2) przeskocz do pierwszego zatwierdzenia, które ma zostać uwzględnione igit commit --amend --reedit-message=HEAD
. Tak właśnie działa harmonijna odpowiedź.Możesz podejść całkiem blisko
Zakłada się, że jesteś mistrzem z linearną historią. To nie jest całkiem squash, ponieważ odrzuca pośrednie zatwierdzenia. Będziesz musiał zmienić nowy HEAD, aby zmodyfikować komunikat o zatwierdzeniu.
źródło
HEAD~4
jako rodzica.