Как может я легко fixup прошлая фиксация?

Я просто считал исправление единственного файла в прошлой фиксации в мерзавце, но к сожалению принятое решение 'переупорядочивает' фиксации, который не является тем, что я хочу. Таким образом, вот мой вопрос:

Время от времени я замечаю ошибку в своем коде при работе над (несвязанной) функцией. Быстрое git blame затем показывает, что ошибка была представлена несколько фиксаций назад (я фиксирую довольно много, так обычно это не новая фиксация, которая представила ошибку). На данном этапе я обычно делаю это:

git stash                      # temporarily put my work aside
git rebase -i ~1   # rebase one step before the bad commit
                               # mark broken commit for editing
vim          # fix the bug
git add      # stage fixes
git commit -C      # commit fixes using same log message as before
git rebase --continue          # base all later changes onto this

Однако это происходит так часто, что вышеупомянутая последовательность становится раздражающей. Особенно 'интерактивная переоснова' является скучной. Там какой-либо ярлык к вышеупомянутой последовательности, которая позволяет мне исправить произвольную фиксацию в прошлом с подготовленными изменениями? Я совершенно знаю, что это изменяет историю, но я делаю ошибки так часто, что я действительно любил бы иметь что-то как

vim              # fix bug
git add -p       # Mark my 'fixup' hungs for staging
git fixup              # amend the specified commit with staged changes,
                                   # rebase any successors of bad commit on rewritten 
                                   # commit.

Возможно, умный сценарий, который может переписать инструменты инфраструктуры использования фиксаций или так?

100
задан Community 23 May 2017 в 12:26
поделиться

1 ответ

Я не знаю об автоматическом способе, но вот решение, которое, возможно, было бы проще использовать человеком:

git stash
# write the patch
git add -p <file>
git commit -m"whatever"   # message doesn't matter, will be replaced via 'fixup'
git rebase -i <bad-commit-id>~1
# now cut&paste the "whatever" line from the bottom to the second line
# (i.e. below <bad-commit>) and change its 'pick' into 'fixup'
# -> the fix commit will be merged into the <bad-commit> without changing the
# commit message
git stash pop
0
ответ дан 24 November 2019 в 04:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: