更改存在于跟踪分支的上游,但是当我输入时git status
它表明我的本地分支机构是最新的。这是新行为吗?我是否更改了配置设置,或者出了什么问题?
ubuntu@host:/my/repo# git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
ubuntu@host:/my/repo# git pull
remote: Counting objects: 11, done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 11 (delta 6), reused 0 (delta 0)
Unpacking objects: 100% (11/11), done.
From bitbucket.org:my/repo
1234567..abcdefg master -> origin/master
Updating 1234567..abcdefg
Fast-forward
file1 | 1 -
file2 | 43 +++++++++++++++++++++++++++++++++++++++++++
file3 | 21 ++++++++++++---------
file4 | 21 ++++++++++++---------
4 files changed, 67 insertions(+), 19 deletions(-)
create mode 100644 file5
状态告诉您的是您落后于所吹罚的裁判origin/master
这是您本地存储库中的本地引用。在这种情况下, ref 恰好跟踪某个远程中的分支,称为origin
,但状态并没有告诉您有关远程分支的任何信息。它告诉您有关 ref 的信息,它只是存储在本地文件系统上的提交 ID(在本例中,它通常位于名为.git/refs/remotes/origin/master
在您的本地存储库中)。
git pull
执行两项操作;首先它做了一个git fetch
获取远程存储库中的最新提交(这会更新origin/master
ref 在你的本地存储库中),然后它会执行git merge
将这些提交合并到当前分支中。
直到您执行以下操作fetch
步骤(单独或通过git pull
)您的本地存储库无法知道上游有其他提交,并且git status
只看你当地的origin/master
ref.
When git status
说是最新的,它的意思是“与当前分支跟踪的分支保持最新”,在本例中意味着“与名为的本地引用保持最新”origin/master
”。这仅相当于“与我们上次执行操作时检索到的上游状态保持同步”fetch
” 这与“最新的上游实时状态”不同。
为什么会这样呢?那么fetch
步骤是一个可能缓慢且昂贵的网络操作。 Git(以及其他分散式版本控制系统)是为了避免不必要的网络操作,并且是与许多人习惯的典型客户端-服务器系统完全不同的模型(尽管正如下面的评论中指出的,Git 的“远程跟踪分支”概念在这里引起了混乱并非所有 DVCS 都共享)。完全可以离线使用 Git,无需连接到集中式服务器,并且输出git status
反映了这一点。
在 Git 中创建和切换分支(并检查其状态)应该是轻量级的,而不是对集中式系统执行缓慢的网络操作。设计 Git 时的假设,以及git status
输出,是用户理解这一点(太多的 Git 功能只有在你已经知道 Git 是如何工作的情况下才有意义)。随着大量不熟悉 DVCS 的用户采用 Git,这一假设并不总是有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)