Git Lo schiacciamento si verifica durante il rebase


Esempio

I commit possono essere schiacciati durante un git rebase . Si consiglia di comprendere la ridefinizione prima di tentare di schiacciare i commit in questo modo.

  1. Determina il commit da cui vorresti rebase e prendi nota del suo hash commit.

  2. Esegui git rebase -i [commit hash] .

    In alternativa, è possibile digitare HEAD~4 invece di un hash di commit, per visualizzare l'ultima commit e altri 4 commit prima dell'ultima.

  3. Nell'editor che si apre quando si esegue questo comando, determinare quali commit si desidera schiacciare. Sostituisci il pick all'inizio di quelle linee con lo squash per schiacciarle nel commit precedente.

  4. Dopo aver selezionato quali commit si vorrebbe schiacciare, ti verrà richiesto di scrivere un messaggio di commit.

Registrazione si impegna a determinare dove rebase

> git log --oneline
612f2f7 This commit should not be squashed
d84b05d This commit should be squashed
ac60234 Yet another commit
36d15de Rebase from here
17692d1 Did some more stuff
e647334 Another Commit
2e30df6 Initial commit

> git rebase -i 36d15de

A questo punto il tuo editor di scelta si apre dove puoi descrivere cosa vuoi fare con i commit. Git fornisce aiuto nei commenti. Se lo lasci come è, allora non succederà nulla perché ogni commit verrà mantenuto e il loro ordine sarà lo stesso di quello precedente al rebase. In questo esempio applichiamo i seguenti comandi:

pick ac60234 Yet another commit
squash d84b05d This commit should be squashed
pick 612f2f7 This commit should not be squashed

# Rebase 36d15de..612f2f7 onto 36d15de (3 command(s))
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

Git log dopo aver scritto il messaggio di commit

> git log --oneline
77393eb This commit should not be squashed
e090a8c Yet another commit
36d15de Rebase from here
17692d1 Did some more stuff
e647334 Another Commit
2e30df6 Initial commit