git fetch与git fetch origin master对跟踪分支有不同的影响

Xoa*_*n93 23 git branch git-fetch

这主要是好奇心的本质,因为我正在努力熟悉Git.我查看了'git fetch'的文档,但我没有看到下面的明显解释.在此先感谢,如果这是显而易见的,请道歉.

1)从中央存储库,比如说GitHub,我克隆一个名为website两台机器上的存储库,HostAHostB.

2)on HostA,我对文件进行了更改,比如说README.txt,然后提交它.
在这一点上HostA,分支的提交masterorigin/master预期的不同,因为我尚未推动

git show master
git show origin/master
Run Code Online (Sandbox Code Playgroud)

报告不同的哈希值(因为master有变化而origin/master没有)

3)一旦我推,他们就是在那之后.


4)现在,HostB如果我做了以下事情:

git fetch
git merge FETCH_HEAD
Run Code Online (Sandbox Code Playgroud)

之后,在HostB上masterorigin/master在查询时报告相同的哈希值git show

如果相反我做了,在HostB:

git fetch origin master
git merge FETCH_HEAD
Run Code Online (Sandbox Code Playgroud)

在那一点上,哈希仍然不同.

git show origin
git show origin/master
Run Code Online (Sandbox Code Playgroud)

报告不同的哈希值

跟踪分支origin/master在我做普通之前不会更新git fetch

为什么是这样?

Von*_*onC 24

如果您的分支具有关联的远程跟踪分支,则意味着其配置如下:

git config branch.[branch-name].remote [remote-name]
git config branch.[branch-name].merge [remote-master]
Run Code Online (Sandbox Code Playgroud)

其中关键部分git fetch解释了两个命令之间的区别:

<refspec>
Run Code Online (Sandbox Code Playgroud)

<refspec>参数的格式是可选的加号+,后跟源ref <src>,后跟冒号:,后跟目标ref <dst>.获取
匹配的远程引用,如果不是空字符串,则使用匹配快速转发与其匹配的本地引用.<src><dst><src>

让我再说一遍:

如果<dst>不是空字符串,则使用匹配快速转发与其匹配的本地引用<src>.
知道:

  • git fetch等同于git fetch origin master:master(从你的分支配置的默认值),因此它将更新远程跟踪分支:操作的Refspec的目的是为您指定.

  • git fetch origin master等同于" git fetch origin master:",而不是" git fetch origin master:master"; 它存储的"获取价值master"分支(远程" origin中') FETCH_HEAD,而不是在’ master"分支机构或远程跟踪" remotes/origin/master"分支(由的JakubNarębski答案)
    .换句话说,没有指定的目的地你的Refspec