git fetch 分支与 fetch 之间的区别 branch:branch

git difference between fetch branch vs fetch branch:branch

我很困惑

git fetch origin master 对比 git fetch origin master:master.

我知道首先会从存储库和指定的分支中获取。

第二个 git fetch origin master:master 呢?

您在这些示例中改变的参数称为 refspec

在第一个示例中,您使用的 shorthand 指定要获取的源引用 (master) 但未指定要更新的目标引用。默认行为将适用,对于典型设置,这意味着 origin/master 将被更新。

第二个示例,您提供源 (master),然后提供 : 以将其与目的地分开,然后提供目的地(也 master)。这将尝试直接更新本地仓库的 local master 分支 - 而不是 origin/master 远程分支引用。它可能会失败(例如,如果本地回购是默认配置中的非裸回购,并且它已 master 签出)。

如果您想使用显式引用规范但仍想更新远程引用,您可以说

git fetch origin master:origin/master