以下是获取
的文档当您想要了解其他人的所有内容时,您会采取措施 一直在努力。由于获取的内容表示为远程 它对您当地的开发工作没有任何影响。
以下示例描述了将本地贡献发布到中央存储库的标准方法之一。
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
,因为它不会改变我的本地开发工作,该怎么办?
答案 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]