(Lo siguiente asume su trabajo está en master
.)
En primer lugar, cambiar el orden de sus últimos tres confirmaciones de manera que bar
es primero.
git rebase -i HEAD~3
Un editor aparecerá con algo como esto:
pick 498e4f4 foo
pick 71547ae bar
pick abf09c6 baz
# Rebase 4d3fe72..abf09c6 onto 4d3fe72
#
# ...
reordenarlos en el editor que aparece de manera que bar
que ocurra primero.
pick 71547ae bar
pick 498e4f4 foo
pick abf09c6 baz
# Rebase 4d3fe72..abf09c6 onto 4d3fe72
#
# ...
Git girará durante unos segundos y eructar una confirmación:
Successfully rebased and updated refs/heads/master.
Ahora puede rodar temporalmente a la bar
commit (HEAD~2
significa dos confirmaciones de vuelta de HEAD
) y dcommit que:
git checkout HEAD~2
git svn dcommit
Si usted es paranoico como yo, puede hacerlo git svn dcommit -n
primero para asegurarse de que sólo está cometiendo lo usted quiere.
Ahora salta de nuevo a master
:
git checkout master
El último bit es rebase de manera que master
se sincroniza con SVN:
git svn rebase
Es un poco confuso para mí por qué esto es necesario, pero Supongo que comprometerse en un estado HEAD aislado tiene algo que ver con eso.
son commits foo, bar y baz ya en la rama principal que está rastreando el svn repo? – Pradeep
En mi caso, no. Pero es bueno mostrar cómo hacerlo en ambos sentidos. – baudtack