为什么git svn dcommit会丢失本地分支合并提交的历史记录?

18
我有一个本地的 git 仓库,使用 git svn clone 创建。我创建了一个本地分支,做了一些更改,切换回主分支,在执行 git svn rebase 命令后,如果一切正常,就会将我的分支合并回主分支。此时树形结构看起来像这样:

alt text http://img.skitch.com/20090108-cjguu3hcci9x2k17mcftamw8f1.jpg

有时候,当我再次执行 git svn rebase 并获取一些远程更改时,它会丢失 a_branch 已经合并到主干的信息,然后树形结构看起来像这样:

alt text http://img.skitch.com/20090108-kn3bn1qgi5ijw8ja5ijkd75pa3.jpg

为什么会出现这种情况?我该如何避免?有没有简单的方法来判断分支是否已经合并,或者应该在完成分支任务后删除分支以防忘记哪些分支已经合并?
2个回答

22

git-svn手册建议不要使用合并。这是一个副作用。因为你正在对分支进行变基(git svn rebase有点像"git pull --rebase"),它实际上重写了历史。它可能会丢弃任何已经在子版本控制系统中存在的本地提交,例如合并,并仅保留在svn存储库中真正存在的那些提交。由于本地分支的微不足道的合并提交在SVN中没有相应的提交,所以只提交“真正”的更改,因此这些更改是在新的变基主分支中所看到的唯一更改。

理想情况下,你的本地分支应该只有快进式的合并,即不会生成合并提交。如果不是这种情况,那么你应该考虑将本地分支变基到主分支上而不是合并它。这样完全避免创建一个合并提交。


0

因为你正在使用svn。这样做会丢失很多信息(例如,你还会丢失作者)。


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