短版:如果变基顺利,它工作正常。如果没有,它仍然可以正常工作,只是在图形查看器中可能会有点混乱。
与往常一样,git pull 基本上是 git fetch 后跟 ... 好吧,在这种情况下,git rebase 而不是 git merge。所以:
- 从
origin获取
- 仅获取
development 分支并将其放入FETCH_HEAD
- 然后,使用带有该 ID 的
git rebase 代替 git merge <commit-ID-from-FETCH_HEAD>
假设您的本地树中的提交图如下所示(我们假设您在某个时刻运行了 git fetch,并使用他们的提交 E 和 F 更新了 origin/development):
C - D <-- FeatureA
/
A - B <-- development
\
E - F <-- origin/development
并且,让我们进一步假设在origin 上,现在他们的分支上还有一个名为development 的提交。 fetch-from-origin 步骤将拾取它并使FETCH_HEAD 指向它,所以让我们将其绘制为节点G:
C - D <-- FeatureA
/
A - B <-- development
\
E - F <-- origin/development
\
G <-- FETCH_HEAD
(如果你的git足够新,1.8.4或更高版本,origin/development此时也会更新,指向节点G。如果没有,你的本地副本development,存储在你的 origin/development 落后了。这对于 rebase 并不重要,它只会改变你在 git log --graph 视图或图形提交树查看器中查看结果的方式。)
现在rebase 将以通常的方法复制您的FeatureA 提交以进行变基,并使FeatureA 指向副本,放弃原始提交。我们将调用重新定位的C' 和D':
C - D [abandoned]
/
A - B <-- development
\
E - F <-- origin/development
\
G <-- FETCH_HEAD
\
C' - D' <-- FeatureA
如果您此时运行普通的 git fetch,或者如果您有足够新的 git 以使 origin/development 已移动;如果我们去掉“废弃”的部分并简化绘图,它就变成了:
A - B <-- development
\
E - F - G <-- origin/development
\
C' - D' <-- FeatureA
如果您快进合并本地分支标签development 以匹配origin/development,则绘制更简单(将扭结从B 放到E 并将development 和origin/development 放到指向G的箭头右侧)。