我正在使用git-svn来管理我的bugfix分支,但它告诉我我有未更改的更改,即使我直接查看SVN repo,我也可以看到它们已经被提交了。这就像错误修复的基础不是将分支设置为合并。
我做错了什么,这里?
git checkout -b fix_bug_1234
git add .
git commit -m "first change"
git add .
git commit -m "second change"
git rebase -i HEAD~2 // squash the two changes together
git svn rebase // fetch any changes from svn
git checkout master
git rebase fix_bug_1234
git svn dcommit
git branch -d fix_bug_1234
error: The branch 'fix_bug_1234' is not fully merged.
答案 0 :(得分:27)
原因是git rebase
更改了提交对象。因此,虽然实际内容(或差异)与那些重新提交的提交相同,但它们指的是不同的父级,因此是不同的。
那样git branch -d
无法验证这些提交的更改是否包含在其他一些提交中。您需要使用git branch -D
(大写D
)强制删除。
旁注:git svn dcommit
与变基有相同的效果。当dcommit
将提交推送到SVN服务器时,它会再次从SVN服务器获取提交。因此,您最终会得到与推送的对象不同的对象。虽然它们的内容可能相同(除非你有冲突),但它们仍然不同(主要原因是git svn
在提交消息中添加一行,说明提交所属的SVN版本。)
答案 1 :(得分:3)
这是我如何做这种事情,它的工作原理。用户戳的答案解释了为什么git rebase没有按照你的意愿行事。
git rebase -i HEAD~2 // squash the two changes together
git svn rebase // fetch any changes from svn
git svn dcommit // you can commit to SVN from any branch
git checkout master
git svn rebase
git branch -d fix_bug_1234