我的第一个建议是不要git pull
。执行 agit fetch
后跟 a git merge
。
回答你的第零个问题:事实上,你是最新的。您拥有远程存储库的所有提交。因此,没有任何东西可以获取或合并1。
要回答您的第一个问题:
git commit
:在您自己的分支上提交您的更改,与远程存储库中发生的事情完全无关。
git fetch origin
: 获取远程存储库 ( origin
) 的内容,但将它们保存在origin/branch
分支下。此时您自己的代码不受影响。
git merge origin/master
: 将远程存储库(您刚才获取的)的分支与当前分支合并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
这是在您克隆存储库之后。现在你说你在本地分支上做了一个新的提交master
:
A -> B -> C -> D -> E -> F
| |
| \- master
|
\- origin/master
所以这里有两点需要注意。
假设 remote 中的其他人没有任何活动origin
,则没有什么新东西要获取。所以git fetch origin master
告诉你没有什么新鲜事。
如果你这样做git merge origin/master
,再一次,没有什么可以合并的。origin/master
是的前缀。master
换句话说,master
已经包含了所有的提交origin/master
,所以没有什么新的可以合并。
如果您使用fetch
andmerge
而不是pull
,您可以很容易地理解双命令 ( pull
) 的哪一部分是导致意外(在您看来)行为的部分。
当然,在 a 之后git push origin master
,你会得到:
A -> B -> C -> D -> E -> F
|
|\- master
|
\- origin/master