没有先从原点调用fetch,我可以改变吗?

时间:2016-01-06 20:01:38

标签: git

以下是获取

的文档
  

当您想要了解其他人的所有内容时,您会采取措施   一直在努力。由于获取的内容表示为远程   它对您当地的开发工作没有任何影响。

以下示例描述了将本地贡献发布到中央存储库的标准方法之一。

git checkout master
git fetch origin master
git rebase -i origin/master
# Squash commits, fix up commit messages etc.
git push origin master

问题> 如果我不打电话给git fetch origin master,因为它不会改变我的本地开发工作,该怎么办?

2 个答案:

答案 0 :(得分:2)

如果您不提取,则您的origin/master不会更新为最新版本。然后你的rebase可能什么都不做(除了--interactive部分,壁球,修复等等,这取决于你并且可以完成),可能是你当地master的前身。 / p>

但当你执行push时,它可能会失败,因为您的本地master不是真实origin/master的继承者。而这恰恰是首先进行变基的重点,使master成为origin/master的继承者。

答案 1 :(得分:1)

  

如果我不调用git fetch origin master,因为它不会改变我的本地开发工作怎么办?

你会将你的工作重新命名为'origin'的'master'分支但是处于'old'状态,那是你上次做fetch时的那个(git fetch,git pull,git remote update,克隆等)

让我们说昨天,远程存储库有:

(at origin) A -> B -> C [master]

然后你做了克隆/拉动,所以你有:

(at yours) A -> B -> C [master] [origin/master]

今天,您的同事做了一些更改,并已将它们发送到“原产地”:

(at origin) A -> B -> C -> X -> Y[master]

今天,你做了一些改变:

(at yours) A -> B -> C [origin/master] -> d -> e[master]

请注意,由于您没有抓取,origin/master跟踪分支仍会记住'origin'上的'master'位于'C'

现在,案例#1:你进行获取,然后重新定位到origin / master。

  • 有:

    (at origin) A -> B -> C -> X -> Y[master]
    
    (at yours) A -> B -> C [origin/master] -> d -> e[master]
    
  • 步骤1)git fetch origin master

    (at origin) A -> B -> C -> X -> Y[master]
    
                           --- X ---- Y [origin/master]
                          / 
    (at yours) A -> B -> C  -> d -> e[master]
    

    请注意,'origin / master'跟踪分支已更新,以反映'origin'的实际当前状态

  • 步骤2)git rebase origin / master现在将'd,e'重新加入'A,B,C,X,Y'

    (at origin) A -> B -> C -> X -> Y[master]
    
                           --- X ---- Y [origin/master] -> d -> e[master]
                          / 
    (at yours) A -> B -> C
    

现在,案例#2:您不执行获取,只需重新绑定到origin / master:

  • 有:

    (at origin) A -> B -> C -> X -> Y[master]
    
    (at yours) A -> B -> C [origin/master] -> d -> e[master]
    
  • 步骤1)git rebase origin / master now ..什么都不做。 'd,e'已经基于'origin / master',所以没什么可做的。那是因为你的'origin / master'跟踪分支与真实的原始状态不同步

    (at origin) A -> B -> C -> X -> Y[master]
    
    (at yours) A -> B -> C [origin/master] -> d -> e[master]