说我从存储库的url做了一个git clone.我对文件做了一些更改,做了一个git提交.
当我做一个git pull,我看到它说"已经是最新的"
它不应该表明我不是最新的东西吗?
我的问题是:
说我做了上面的改变到我的本地回购,但是没有提交2天,但是在2天之前,其他人已经改变了远程回购.我必须采取哪些措施来确保我不会覆盖远程仓库中的更改,或者至少能够在提交之前提取最新的更改?
有没有办法在我的本地仓库和远程仓库之间进行区分,以检查它们之间存在哪些差异?(如果我只是想回忆一下之前的情况?)
Sha*_*baz 12
我的第一个建议是不git pull.做一个git fetch跟着一个git merge.
回答你的第零个问题:事实上,你是最新的.您拥有远程存储库具有的所有提交.因此,没有什么可以获取或合并1.
回答你的第一个问题:
git commit:在您自己的分支上提交您的更改,与远程存储库中发生的事情完全无关.git fetch origin:获取远程存储库(origin)的内容,但将它们保存在origin/branch分支下.此时您自己的代码不受影响.git merge origin/master:merge origin/master是您当前分支master的远程存储库origin(您刚刚获取)的分支.git push origin:将提交和合并推回到远程存储库回答你的第二个问题:
git fetch origin:更新origin/branch分支.git diff origin/master:获取当前分支和分支之间的差异origin/master.1假设这是您的存储库中的提交最初在分支上的样子master:
A -> B -> C -> D -> E
|
|\- master
|
\- origin/master
Run Code Online (Sandbox Code Playgroud)
克隆存储库后就是这样.现在你说你在本地分支上做了一个新的提交master:
A -> B -> C -> D -> E -> F
| |
| \- master
|
\- origin/master
Run Code Online (Sandbox Code Playgroud)
所以这里有两件事需要注意.
假设遥控器中的其他人没有活动origin,则没有什么新东西可以获取.所以git fetch origin master告诉你没有什么新东西.
如果你这样做git merge origin/master,再没有什么可以合并的.origin/master是一种前缀的master.换句话说,master已经包含了所有提交origin/master,因此没有什么新东西可以合并.
如果你使用过fetch而merge不是代替pull,你可以很容易地理解double-command(pull)的哪一部分是导致意外(在你看来)行为的部分.
当然,经过一段时间后git push origin master,你会得到:
A -> B -> C -> D -> E -> F
|
|\- master
|
\- origin/master
Run Code Online (Sandbox Code Playgroud)