Я только что прочитал изменение одного файла в прошлом коммите в git, но, к сожалению, принятое решение «переупорядочивает» коммиты, чего я не хочу. Итак, вот мой вопрос:
Время от времени я замечаю ошибку в своем коде во время работы над (несвязанной) функцией. Затем быстро git blame
выясняется, что ошибка была введена несколько коммитов назад (я совершаю довольно много, поэтому обычно это не самая последняя фиксация, которая внесла ошибку). На этом этапе я обычно делаю так:
git stash # temporarily put my work aside
git rebase -i <bad_commit>~1 # rebase one step before the bad commit
# mark broken commit for editing
vim <affected_sources> # fix the bug
git add <affected_sources> # stage fixes
git commit -C <bad_commit> # commit fixes using same log message as before
git rebase --continue # base all later changes onto this
Однако это происходит так часто, что приведенная выше последовательность действий становится надоедливой. Особенно скучна "интерактивная перебазировка". Есть ли какой-либо ярлык для приведенной выше последовательности, который позволяет мне исправить произвольный коммит в прошлом с помощью поэтапных изменений? Я прекрасно понимаю, что это меняет историю, но я так часто делаю ошибки, что мне очень хотелось бы иметь что-нибудь вроде
vim <affected_sources> # fix bug
git add -p <affected_sources> # Mark my 'fixup' hungs for staging
git fixup <bad_commit> # amend the specified commit with staged changes,
# rebase any successors of bad commit on rewritten
# commit.
Может быть, умный скрипт, который может переписывать коммиты с помощью сантехнических инструментов?
rebase -i
?
rebase --onto tmp bad-commit master
. Как написано, он попытается применить плохую фиксацию к фиксированному состоянию фиксации.