Просто сделайте интерактивный перебазироваться, сквош из адресной привязки коммитов вы хотите раздавленный или fixupped (устроился?)
git rebase HEAD~10
pick a4461d3
pick d998164
pick 0a1f6e1
f 310ba9d
f 60b7e01
f 7baef60
pick bb9a551
pick badbad1
pick fd9a10c
pick 59ed66f
# Rebase e7e1369..60b7e01 onto fd9a10c (10 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
# d, drop = remove commit
#
# 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
Учебники таковы, потому что они должны быть. Rebase * копии * фиксируются, оставляя оригиналы нетронутыми (это должно быть, Git не может ничего изменить, как только они были зафиксированы). Следовательно, вы должны повторно скопировать все коммиты «после» исправления, потому что оригинальные неотправленные коммиты вернутся к их более ранним, оригинальным, нефиксированным коммитам. См. Ответ Джареда ниже. – torek