为什么我必须推动我刚刚从Git中删除的更改?

mtn*_*rop 3 git

我在本地计算机上有一个Git存储库,我从远程服务器克隆.我克隆的Git存储库是一个裸存储库.

还有一件事让我感到困惑的是,当对原点进行了更改并且我git pull origin master更新了我的本地存储库时,git status然后告诉我我是X提交的原因,其中X是我刚刚提取的提交数.

尽管提交日志已经完全相同.

所以我总是在git push origin master事后做,但我只是想知道是否有人能解释为什么这是必要的以及我是否可能不会这样做.

在我看来,如果我只是从原点拉出变化,那么两个回购应该是相同的.那么为什么我被告知我的原点呢?这与它是一个裸存储库的事实有关吗?

为了清楚起见,这里的情况更详细一些:

我在远程服务器上有一个简单的git repo(hub).该repo有两个克隆:我的本地机器上的"dev"和"staging",与原始服务器在同一台服务器上.

当我对dev进行更改时,我将git push origin master他们转到裸露的"hub"仓库.然后我登录到远程服务器,cd到"staging"repo并git pull origin master从"hub"更新"staging".

在我完成此操作后,如果我使用中心比较集线器和登台提交日志,git log --pretty=oneline我可以看到它们是相同的.

但是,如果我git status在"staging"目录中执行以下操作,则会得到以下结果:

$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
Run Code Online (Sandbox Code Playgroud)

那么我通常会git push origin master从那里做,我被告知:

$ git push origin master
Everything up-to-date
Run Code Online (Sandbox Code Playgroud)

一切正常,但我在脑海中有这个唠叨的问题,我是否在设置回购时没有犯错,或者这是否正常......

Mic*_*ley 5

根据man git-pull:

合并到远程分支的当前分支next:

$ git pull origin next
Run Code Online (Sandbox Code Playgroud)

这会next暂时保留一份副本FETCH_HEAD,但不会更新任何远程跟踪分支.使用远程跟踪分支,可以通过调用fetch和merge来完成相同的操作:

$ git fetch origin
$ git merge origin/next
Run Code Online (Sandbox Code Playgroud)

重点是我的.

基本上,Git告诉你更新的主人是先行的origin/master,这是主人远程跟踪分支.由于此跟踪分支未被更新git pull origin master(如手册页所示),因此您技术上领先于它.调用git fetch origin更新远程跟踪分支,然后您可以手动合并该跟踪分支(如第二个联机帮助页示例中所示).

AFAIK,如果您没有指定分支名称git pull(例如git pull origin),它将读取.git/config它应该获取的内容,并且更新远程跟踪分支.