Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git svn:在svn重新基址后保留单个合并提交_Git_Git Svn - Fatal编程技术网

git svn:在svn重新基址后保留单个合并提交

git svn:在svn重新基址后保留单个合并提交,git,git-svn,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 切换到主分支 git-svn-rebase git签出特性分支 git重基主控器

我遵循此模式将我的代码在功能分支中签入到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 切换到主分支 git-svn-rebase git签出特性分支 git重基主控器 切换到主分支 git合并--无ff功能分支 修改最后一次提交 git svn数据委员会 (master是我的远程Subversion跟踪分支)

这将在master上创建一个合并提交(不管我在featurebranch上完成了多少git提交),我可以将其签入Subversion

然而,在我将featurebranch合并到master之后,有人将代码签入Subversion,当我执行命令
git svn rebase
时,将应用新的更改,并在上面应用featurebranch的每个提交。此时,我不再有一个合并提交,而是在master中的feature分支上执行的每个提交

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

以下是我的做法:

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

通过使用
--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。

仅供参考,没有规则规定在执行dcommit时一次只能推送一个提交。你可以一次做几件事(就像斯派克建议的那样,按照你喜欢的方式清理历史记录之后)。