为什么git要获取originmaster:master快进本地分支?
我一直在玩弄git,并坚持使用git fetch的概念 我尝试并观察了以下情况: (一)为什么git要获取originmaster:master快进本地分支?,git,version-control,git-fetch,Git,Version Control,Git Fetch,我一直在玩弄git,并坚持使用git fetch的概念 我尝试并观察了以下情况: (一) $git fetch 获取所有远程分支,并更新所有相应的远程跟踪分支。我知道它查看.git/config文件,并使用默认的远程存储库位置和默认的fetch refspec,通常是“refs/heads/:refs/remotes/origin/”。它不快进任何本地分支 (二) $git获取来源 观察结果与表1相同) (三) $git获取原始主机 仅获取主分支,并更新远程跟踪分支原点/主分支。不快进本地“主”
$git fetch
获取所有远程分支,并更新所有相应的远程跟踪分支。我知道它查看.git/config文件,并使用默认的远程存储库位置和默认的fetch refspec,通常是“refs/heads/:refs/remotes/origin/”。它不快进任何本地分支
(二)
$git获取来源
观察结果与表1相同)
(三)
$git获取原始主机
仅获取主分支,并更新远程跟踪分支原点/主分支。不快进本地“主”分支
(四)
$git获取原始主机:主机
仅获取主分支,并更新远程跟踪分支原点/主分支。快进本地“主”分支
理解1)和2)很简单。然而,3)和4)使我困惑
fetch命令与本地分支有什么关系?为什么它会快速推进本地分支机构?(它影响本地分支的证据是当我尝试git fetch origin master:master
时,当主分支签出时,它抛出以下错误:致命:拒绝提取到非裸存储库的当前分支refs/heads/master
)
根据我的直觉,在任何类型的fetch命令中,更新远程跟踪分支都是默认行为。但是,当执行git fetch origin master
时,它还有一个更新fetch\u头的额外行为。当执行git fetch origin master:master
时,它还有一个更新本地分支“master”的行为。我的直觉正确吗
它是否将git-fetch-origin-master:master
解释为git-fetch-origin-refs/heads/master:refs/heads/master
?(可能与我之前的问题重复)
它是否将
git fetch origin master
解释为git fetch origin refs/heads/master:
?当您在
中明确提到目的地时,更新匹配的本地ref是预期的行为
格式如下:
git fetch [options] <remote> <refspec>
(显然,对于“来源”和“目的地”)
据说
获取与
匹配的远程引用,如果
不是空字符串,则尝试更新与之匹配的本地引用
您还可以查看上述特定语法
并回答附带问题: 但是,当执行
git fetch origin master
时,它还有一个更新fetch\u HEAD
的额外行为。当执行git fetch origin master:master
时,它还有一个更新本地分支“master”的行为。我的直觉正确吗
不完全正确。如果
不是作为:
给定的,则给定的名称将被视为
,因此当您执行git fetch origin master
时,它与git fetch origin master:master
相同FETCH\u HEAD
用于内部,即那些git pull
的内部,并可用于脚本编写,但您不需要在日常git使用中费事
“它是否将gitfetch-origin-master:master
解释为git-fetch-origin-refs/heads/master:refs/heads/master
?(可能对我前面的问题是多余的)”
是。
它是否将git-fetch-origin-master
解释为git-fetch-origin-refs/heads/master:
否,如果
的
一侧为空,则不会更新任何内容,因为您没有指向任何内容。(不要与上面提到的省略:
本身的情况相混淆。有趣的是,相反的:我的分支
正在删除我的分支
,因为它更新了一个空引用)基本上是正确的,但遗漏了一些项目
首先,我们必须注意Git版本早于1.8.4的一个特例。提及
- “git fetch origin master”与“git fetch origin”或“git fetch”不同 未更新“参考/远程/源/主”;这是一个很早的决定 保持远程跟踪分支更新的设计决策 这是可以预测的,但在实践中,人们发现这一点更多 无论何时我们有一个 我们在运行“git push”时一直在更新它们 已经打破了最初的“可预测性”
git fetch origin master
在Git 1.8.3和更早版本中表现不同。在1.8.4及更高版本中,这将更新refs/remotes/origin/master
(默认情况下,但这取决于默认的获取refspec)
refspec的描述正确,但缺少一项:通常语法为:
- 可选的前导加号
表示+
(仅适用于此特定参考规范)李>--force
- 源参考李>
- 分隔符
;及:
- 目的地参考号
refs/heads/master
,也可以不限定,例如,master
。如果你使用了一个不合格的变体,Git会找出完全合格的拼写
通常,可以省略源和目标中的一个(有时甚至两个)。对于git fetch
和git push
,这种refspec的含义是不同的。省略源需要包含冒号,而省略目标也可以省略冒号。即:
,或master:master
,或branch1:branch2
,等等,都提供源和目标tag:tag
是一个没有目标的源master
m
git fetch origin master
git fetch origin