当我从一个功能分支中"拉出--rebase origin development"时会发生什么?

M J*_*obs 6 git rebase feature-branch

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

今天,我做了不同的事情,并git pull --rebase origin development从我的功能分支调用.现在,有什么区别?

Sto*_*ica 12

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

git fetch origin development
git rebase origin/development
Run Code Online (Sandbox Code Playgroud)

也就是说,获取origin/development然后在其上重新绑定当前分支.

UPDATE

正如@torek指出:

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


tor*_*rek 10

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


一如既往,git pull基本上git fetch是......好吧,在这种情况下,git rebase而不是git merge.所以:

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

所以我们说的在本地树犯图形看起来是这样的(我们假设你跑了git fetch,在一些点更新origin/development他们的提交EF):

        C - D   <-- FeatureA
      /
A - B           <-- development
      \
        E - F   <-- origin/development
Run Code Online (Sandbox Code Playgroud)

而且,让我们进一步假设,origin现在还有一个提交在他们的分支上命名development.本fetch-从原产地一步将它捡起来,做FETCH_HEAD点到,所以让我们在绘制为节点G:

        C - D       <-- FeatureA
      /
A - B               <-- development
      \
        E - F       <-- origin/development
              \
                G   <-- FETCH_HEAD
Run Code Online (Sandbox Code Playgroud)

(如果你的git足够新,1.8.4或更高版本,此时origin/development也会更新,指向节点G.如果没有,你的本地副本development,存储在你的中origin/development,落后.这对真的不重要rebase,它只会改变你在git log --graph视图或图形提交树查看器中看到结果的方式.)

现在,rebaseFeatureA使用通常的方法复制您的提交以进行rebase,并FeatureA指向副本,放弃原始提交.我们会打电话给那些重订C'D':

        C - D       [abandoned]
      /
A - B               <-- development
      \
        E - F       <-- origin/development
              \
                G   <-- FETCH_HEAD
                  \
                    C' - D'   <-- FeatureA
Run Code Online (Sandbox Code Playgroud)

如果你git fetch在这一点上运行一个平原,或者你有更新的git以便origin/development移动; 如果我们删除"废弃"部件并简化绘图,它将变为:

A - B               <-- development
      \
        E - F - G   <-- origin/development
                  \
                    C' - D'   <-- FeatureA
Run Code Online (Sandbox Code Playgroud)

如果快进合并你的本地分支标签development以进行匹配origin/development,则绘制起来更简单(将扭结从B向下放到E并将箭头指向的两个developmentorigin/development右边G).