git-svn:在svn rebase之后保持单合并提交

时间:2011-03-15 22:44:17

标签: git git-svn

我正在遵循这种模式,使用git-svn检查我的代码在功能分支中的Subversion:

git checkout master
git svn rebase
git checkout feature-branch
git rebase master
git checkout master
git merge --no-ff feature-branch
git commit --amend
git svn dcommit

(master是我的远程Subversion跟踪分支)

这会在master上创建一个合并提交(无论我在feature-branch上做了多少git提交),我可以检查Subversion。

但是,在我将功能分支合并到主服务器之后,有人将代码检入Subversion,当我执行命令git svn rebase时,应用了新的更改,并且应用了功能分支中的每个单独提交。此时,我不再有单个合并提交,而是我在master中的feature-branch上执行的每次提交。

处理此问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

我是这样做的:

git checkout feature-branch
git rebase -i HEAD~10  # squash commits in my editor
git svn rebase  # make sure I have the latest code
git svn dcommit
git checkout master
git svn rebase # now the feature-branch squashed commit is visible on master

答案 1 :(得分:1)

您可以使用--squash选项执行您想要的操作:

# rebase master and then feature-branch as above
git merge --squash feature-branch
git commit -m "Merge from feature-branch"
git svn dcommit

这可以避免将功能分支作为新提交的父级。这听起来好像多个父母混淆了git-svn。