Git: 如何在rebase后提交到SVN分支?

6
我有一个关于SVN分支的问题。 我使用git checkout -t -b stable svn/stable进行了检出。 然后我使用git rebase master进行了合并。 之后,我尝试用git svn dcommit将合并更改提交到远程分支。
但现在似乎Git将更改推送到了主干而不是分支 :( git status告诉我:
# On branch stable
# Your branch and 'svn/stable' have diverged,
# and have 218 and 52 different commit(s) each, respectively.
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
...

有人知道我做错了什么,以及正确的做法吗?

2个回答

2
我最近遇到了相同的错误。问题在于当你将分支rebase到master时,它首先会将当前分支硬重置到master,然后将合并的提交应用到它上面。但是你的master分支与svn/trunk相关联,因此新重置的分支也与其相关联。因此,git-svn在dcommit时认为提交被“插入”到svn/trunk中当你推送它们。
解决方案是使用git merge --no-ff而不是git rebase。或者使用Subversion本身的合并工具。

谢谢,我知道可以使用git merge的可能性,但那样我会失去修订历史和很多其他信息。将其与主分支的分支进行rebase是否也是一种解决方案? - ownking
@tigerseye,我怀疑这样的分支技巧并不能帮助你。因为与svn/trunk相关联的提交将无论如何进入你的分支。 为了保留修订历史记录,你可以使用Subversion进行合并。否则,你只会污染Subversion日志,其他开发人员也不会满意。 - P Shved
我是Git的新手,我真的看到了它的优点,但在这个早期阶段,有时候对于日常挑战来说感觉有些困难。在Git转换者的世界中,将开发Git分支合并到稳定的SVN分支中不是一个常见的情况吗?是否存在一种通用的方法来做到这一点? - ownking
如果那个 Git 分支是一段时间前从相同的 SVN 分支分支出来的,你可以将其合并到 SVN 分支中。但在你的情况下,你正在尝试将一个“SVN 分支”合并到另一个“SVN 分支”中,但要以 Git 的方式而不是 SVN 的方式进行操作!这是不同的! - P Shved

0

现在它可以工作了,我是这样做的:

   git checkout master
   git svn rebase
   git checkout --track -b svn_stable svn/stable
   git merge --squash master
   git commit -m "Bring stable up-to-date with trunk" 
   git svn dcommit --dry-run
   git svn dcommit

合并比带有冲突处理的变基容易得多。

在这次尝试中,我忘记使用--no-ff了,这会强制每个合并都提交一个新的提交,对吗?

谢谢你的帮助 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接