假设我做git fetch origin
并得到以下输出:
From origin
* [new branch] develop -> origin/develop
* [new branch] new -> origin/new
这种语法是什么意思?
有时它输出不同的东西,如果我git fetch origin develop
我得到以下输出:
From origin
* branch develop -> FETCH_HEAD
f3beeb4..2b38122 develop -> origin/develop
所以这里的语法不同。为什么?我很欣赏这些语法的简短描述。
修改
对不起家伙因为我的问题不太清楚。我对这些部分的语法/逻辑感兴趣:
* [new branch] develop -> origin/develop
* [new branch] new -> origin/new
* branch develop -> FETCH_HEAD
f3beeb4..2b38122 develop -> origin/develop
而不是这个git fetch origin
。
答案 0 :(得分:2)
git fetch
将连接到远程存储库。它(默认情况下)将在本地存储库中创建“远程分支”,这些只是名为remotename/branchname
的普通引用。
如果在远程存储库上检测到新分支,git fetch
将创建一个新的“远程分支”:
* [new branch] new -> origin/new
在遥控器(遥控器的原点)上有一个名为“new”的新分支。因此git
在此存储库中创建“origin / new”。
如果本地“远程分支”与远程存储库上的分支不同,git
将更新它:
f3beeb4..2b38122 develop -> origin/develop
这里“origin / develop”指向提交f3beeb4,但有人推到了远程目录,因此它现在指向2b38122。因此git
会将“远程分支”从f3beeb4更新为2b38122。
如果指定显式分支名称,git
会将其存储在名为“FETCH_HEAD”的特殊引用中。这将打印如下:
* branch develop -> FETCH_HEAD
答案 1 :(得分:1)
git fetch
更新远程跟踪分支(在本例中为new
和develop
)。
git fetch origin develop
在develop
中存储了.git/FETCH_HEAD
分支的值。
<强>更新强>
找到一个stackoverflow帖子,其中描述了相同的(here)。
答案 2 :(得分:1)
git-fetch的文档使其有些明确。
git fetch origin
确实是git fetch <repository>
。您告诉Git从哪里获取更新,并且它不一定必须是以前添加的遥控器 - 如果您愿意,它可以是一个URL。
在您的项目中,您可以拥有所需数量的遥控器;但通常情况下,只需要一个遥控器,按惯例,它是origin
。
在文档中,如果省略,origin
是默认值,除非您配置了上游分支:
如果未指定远程,则默认情况下将使用
origin
远程,除非为当前分支配置了上游分支。
如果你只有一个遥控器,那么这几乎没有意义;如果您想从不同的遥控器中专门获取,这是您实际使用此表单的时候。
git fetch origin develop
将<refspec>
参数添加到上面的命令中。它基本上告诉Git哪个引用,以及哪个本地引用更新。它会将此获取的结果直接存储在short-lived ref called FETCH_HEAD
,而不是分支中。
答案 3 :(得分:1)
git fetch origin
基本上更新了远程跟踪分支,这意味着所有远程存储库分支都将复制到本地存储库。常规命令为git fetch <remote>
,其中remote
在此情况下为origin
。然后输出显示已下载的分支:
develop
,它是一个并指向(远程)origin/develop
(因此->
)并且是new branch
new
指向(再次远程)origin/new
并且也是new branch
git fetch origin develop
或一般git fetch <remote> <branch>
与上述相同,但仅提取指定的<branch>
,在您的情况下为develop
。
参考文献: