1

在我的办公室,我们正在过渡到 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 上的旧提交(即,在变基之前),而不是来自 SVN 服务器的新提交。

有什么方法可以让它很好地合并吗?

4

1 回答 1

1

您是否曾经在git svn rebase功能分支上进行过一段时间?请注意,这git svn 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
于 2012-09-11T05:45:24.260 回答