大家好,
在git中有一件事情对我来说非常不合理,以下是发生的情况:
- 我执行
git status
,看到我在主分支上,并且没有要提交的内容,工作目录也很干净。 - 然后我执行
git pull origin master
,拉取了一堆代码,没有问题。 - 现在当我执行
git status
时,我看到了一行新的提示您的分支比origin/master领先1个提交
我的本地repo和远程repo完全同步,但您的分支比origin/master领先1个提交是什么意思,这非常非常令人困惑。
大家好,
在git中有一件事情对我来说非常不合理,以下是发生的情况:
git status
,看到我在主分支上,并且没有要提交的内容,工作目录也很干净。git pull origin master
,拉取了一堆代码,没有问题。git status
时,我看到了一行新的提示您的分支比origin/master领先1个提交我的本地repo和远程repo完全同步,但您的分支比origin/master领先1个提交是什么意思,这非常非常令人困惑。
git pull origin master
5. 现在你执行git status
,你会发现你的分支领先于origin/master,即使你在本地仓库中没有新的提交,也没有任何需要推送的内容!(在这个例子中,自第1步(克隆)以来,你没有在本地提交任何新的内容)git pull origin
来解决这个问题。
git pull origin master
将所有新的提交从origin分支拉到你的本地分支。
git pull origin
还会重置你的引用,使其等于origin上的master分支所引用的提交!(如果没有这样做,git-bash就会认为你领先了很多提交!因为在提交树中,在你的master引用所指向的提交之后有很多提交!)您已在本地计算机上添加了一个提交,该提交尚未发送到远程服务器。
如果您确定修改应与远程存储库共享,则使用git push
命令将提交发送到远程:
git push orgin master:master
git push origin master:master
- 已在帖子中更正。 - LeGECmaster
设置为跟踪origin/master
,则没有区别。它只是允许您明确指定目标远程分支 - 您可以编写git push origin master:testing
或其他内容。 - LeGECgit log --all --graph --pretty=format:'%h %d %s'
* (master) Commit D
* (origin/master) Commit C
* Commit B
* Commit A
git push
将提交D推送到远程仓库,然后你就可以完全同步了。实际上,你假设你的本地分支和远程分支是同步的。如果它说你的本地分支比 origin/master 多一个提交,那么肯定是这样的。我们都信任 Git。
使用这个进行测试。
git checkout master // You move to master branch
cat .git/HEAD //shows the commit on which HEAD is pointing to
git checkout origin/master //you switch to origin master branch
cat .git/HEAD
git push origin master