在我的办公室,我们正在转向Git,目前我正在使用Git-SVN执行以下工作流程:
git svn rebase
git checkout -B FEATURE_NUMBER
在本地提交时工作
git checkout master
git svn rebase
git merge --squash FEATURE_NUMBER
修复任何冲突,运行测试等
git commit -a -m "Actual Commit Message for everyone else"
git svn dcommit
工作正常,但我也在办公室之间旅行并使用不同的计算机,所以如果我没有完成,我一直在使用私人GitHub仓库来推动我的分支。
该工作流程为:
git svn rebase
git checkout -B FEATURE_NUMBER
在本地提交时工作
现在我想搬办公室
git push origin FEATURE_NUMBER
去新办公室
git svn rebase
git checkout -B FEATURE_NUMBER
git pull origin FEATURE_NUMBER
然而,问题在于,会发生一堆冲突。似乎在想,在Github,我已经解除了我的团队自从我最初在总部重新定位以来所做的所有改变。基本上,它优先考虑GitHub上的旧提交(即,从rebase之前)对来自SVN服务器的新提交的优先级。
有什么方法可以让它很好地合并吗?
答案 0 :(得分:1)
您是否曾在功能分支上执行git svn rebase
?请注意git svn rebase
执行真正的rebase,即使用不同的父级创建新的提交。另请注意,git pull
会自动创建合并。这些冲突是尝试合并在树中两个不同位置的不同提交中找到的相同更改(移动办公室之前FEATURE_NUMBER
上的更改)的结果。
要避免此问题,您可以避免拉取,而是请求git fetch
。它只是将新提交提取到origin/FEATURE_NUMBER
,因此您可以随意使用它们,例如:
# fetch new work from GitHub into origin/FEATURE_BRANCH
git fetch origin
# reset FEATURE_NUMBER to the latest GitHub
git checkout -B FEATURE_NUMBER origin/FEATURE_NUMBER
# reparent those commits on top of the latest svn
git svn rebase