git的提取与混帐取主产地对跟踪分支不同的影响(git fetch vs. git fetch or

2019-06-26 22:48发布

这是大多的好奇心,因为我试图让熟悉Git的性质。 我已经看过了“混帐取”的文件,但我没有看到一个明显的解释为以下。 在此先感谢,并道歉,如果这是嚎明显。

1)从中央存储库,GitHub上说,我克隆了一个名为库website上每两个机, HostAHostB

2) HostA ,我进行了更改一个文件,说README.txt ,并提交。
在这一点上HostA ,对分支机构提交masterorigin/master的,符合市场预期不同,因为我还没有推

git show master
git show origin/master

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

3)当我推开,它们是相同的了。


4)现在,在对HostB ,如果我做到以下几点:

git fetch
git merge FETCH_HEAD

事后,主机B上masterorigin/master报告时询问相同的哈希git show

相反,如果我做了,在HostB

git fetch origin master
git merge FETCH_HEAD

在这一点上仍然哈希不同。

git show origin
git show origin/master

报告不同的散列

跟踪分支origin/master不更新,直到我做一个简单git fetch

为什么是这样?

Answer 1:

如果你的分支有关联的远程跟踪分支 ,这意味着它的配置是这样的:

git config branch.[branch-name].remote [remote-name]
git config branch.[branch-name].merge [remote-master]

的关键部分git fetch这解释了两个命令间的差别是:

<refspec>

一个的格式<refspec>参数是可选的加+ ,接着是源REF <src>后跟一个冒号: ,接着目的地REF <dst>
相匹配的远程REF <src>被取出,并且如果<dst>不为空字符串,与其匹配使用快进本地REF <src>

让我再说一遍:

如果<dst>不为空字符串,与其匹配使用快进本地REF <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的目的地



Answer 2:

答案就在你从后面的消息git fetch 。 在第一种情况下,当你没有提供的Refspec回来,你会看到,远程跟踪分支更新:

remote: Counting objects: 5, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /depot
   c67d1c8..1941673  master     -> origin/master

注意消息怎么说,起源/主机与从源头上掌握更新。

现在,在第二种情况下,在指定的Refspec,你得到的东西完全不同:

remote: Counting objects: 5, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /depot
 * branch            master     -> FETCH_HEAD

所以,当你指定的Refspec,远程跟踪分支(origin / master的)不被更新,仅FETCH_HEAD。

最终的结果是,你出现的时候你不是真的要提前起源/高手。 我无法想象,为什么这种行为是可取的,但它绝对是fetch命令的一个有趣的小怪癖。



Answer 3:

如果你想快进合并自己,或使用git拉。 你似乎并不明白,混帐的目的是取不更新你的工作树。 取意来更新您的跟踪分支。



文章来源: git fetch vs. git fetch origin master have different effects on tracking branch