(ниже предполагается, что ваша работа включена master
.)
Во-первых, измените порядок последних трех коммитов, чтобы bar
был первым.
git rebase -i HEAD~3
В редакторе появится что-то вроде этого:
pick 498e4f4 foo
pick 71547ae bar
pick abf09c6 baz
# Rebase 4d3fe72..abf09c6 onto 4d3fe72
#
# ...
Переупорядочьте их в всплывающем редакторе, чтобы bar
был первым.
pick 71547ae bar
pick 498e4f4 foo
pick abf09c6 baz
# Rebase 4d3fe72..abf09c6 onto 4d3fe72
#
# ...
Git будет вращаться в течение нескольких секунд и выдавит подтверждение:
Successfully rebased and updated refs/heads/master.
Теперь вы можете временно откатиться до коммита bar
(HEAD~2
означает два коммита от HEAD
) и отменить его:
git checkout HEAD~2
git svn dcommit
Если вы параноик, как я, вы можете сначала сделать git svn dcommit -n
, чтобы убедиться, что вы делаете только то, что хотите.
Теперь вернитесь к master
:
git checkout master
Последний бит должен быть перебазирован так, чтобы master
синхронизировался с svn:
git svn rebase
Мне немного неясно, почему это требуется, но я предполагаю, что dcommitting в отключенном состоянии HEAD как-то связано с этим.