当我' git pull --rebase origin development'从功能分支?

时间:2014-03-11 20:31:00

标签: git rebase feature-branch

我们说我有一个名为FeatureA的功能分支,它与它所基于的(远程)development不同步。通常我会通过调用git rebase development来修改我的分支(在用origin/development自然地同步我的本地开发之后)。

今天,我做的与众不同,而是从我的功能分支中调用git pull --rebase origin development。现在,有什么区别?

2 个答案:

答案 0 :(得分:13)

git pull --rebase origin development是这些命令的快捷方式:

git fetch origin development
git rebase origin/development

即,获取origin/development,然后在其上重新定位当前分支。

<强>更新

正如@torek所指出的那样:

  

是的,除了fetch 1.8.3或更早版本中fetch 1.8.3或更早版本的两参数版本没有更新。 (rebase结果是相同的,但原点/开发不会移动。)

答案 1 :(得分:9)

简短版本:如果rebase顺利,它可以正常工作。如果没有,它仍然可以正常工作,它可能在图形查看器中有点混乱。


与往常一样,git pull基本上是git fetch,后跟......嗯,在这种情况下,git rebase而不是git merge。所以:

  • origin
  • 获取
  • 仅获取development分支并将其放入FETCH_HEAD
  • 然后,使用带有该ID的git merge <commit-ID-from-FETCH_HEAD>
  • 而不是git rebase

因此,假设您的本地树中的提交图看起来像这样(我们假设您在某些时候运行了git fetch,并使用其提交origin/development和{{更新了E 1}}):

F

并且,让我们进一步假设在 C - D <-- FeatureA / A - B <-- development \ E - F <-- origin/development 上,现在还有一个名为origin的分支上的提交。 development - 来自原点的步骤会将其选中并使fetch指向该值,因此我们将其作为节点FETCH_HEAD绘制:

G

(如果您的git足够新,1.8.4或更高版本, C - D <-- FeatureA / A - B <-- development \ E - F <-- origin/development \ G <-- FETCH_HEAD 此时也会更新,指向节点origin/development。如果不是,则为G的本地副本存储在development中的1}}滞后。对于rebase而言,它只会改变你在origin/development视图或图形提交中看到结果的方式 - 树查看器。)

现在git log --graph将以常规方法复制您的rebase提交以进行rebase,并使FeatureA指向副本,放弃原始提交。我们会打电话给那些有争议的人FeatureAC'

D'

如果此时运行普通 C - D [abandoned] / A - B <-- development \ E - F <-- origin/development \ G <-- FETCH_HEAD \ C' - D' <-- FeatureA ,或者你有更新的git以便git fetch移动;如果我们删除“废弃”部分并简化绘图,它就变成了:

origin/development

如果您快速合并本地分支标签A - B <-- development \ E - F - G <-- origin/development \ C' - D' <-- FeatureA 以匹配development,则绘制起来更简单(将扭结从B降至E并放置origin/development以及指向development)的箭头右侧的origin/development

相关问题