我刚刚做了
get fetch origin feature/8067
在它下面,我有3列:
* branch feature/8067 -> FETCH_HEAD
* [new branch] feature/8067 -> origin/feature/8067
尝试处理此问题……从here中读取,我刚刚了解到FETCH_HEAD
基本上是我上次做fetch
的地方的提示。该文件将包含一个提交。
[new branch]
是否引用了在我的refs/remote
下创建的 new 分支?
我不确定以下内容是否正确:feature/8067 -> origin/feature/8067
第二列是<nameOfBranchOnRemoteRepo>
而第三列是<repoName/nameOfBranchOnRemoteRepo>
,它说我在refs中获取的远程分支指向远程中的分支吗?
答案 0 :(得分:1)
即使对于老手,获取输出也会造成混乱。这是我解码它们的方式:
* branch feature/8067 -> FETCH_HEAD * [new branch] feature/8067 -> origin/feature/8067
从右到左处理每一行:
第一行以FETCH_HEAD
结尾,这意味着引用已存放到FETCH_HEAD
中。请参阅下面有关FETCH_HEAD
的注释。箭头是硬编码的(总是显示,您可以忽略它);名称feature/8067
是遥控器上引用的名称;并且* branch
告诉您,它实际上是远程设备上的refs/heads/feature/8067
,即是一个分支。由于此信息已存储到FETCH_HEAD
中,因此没有其他可用信息。
第二行以origin/feature/8067
结尾。您的远程跟踪名称 1 origin/feature/8067
(全名refs/remotes/origin/feature/8067
)已创建或更新。和以前一样,我们有箭头和相同的名称。然后我们有了* [new branch]
:这告诉我们origin/feature/8067
以前不存在,并且feature/8067
是(在我们已经知道的情况下)遥控器上的分支名称。
这就是我为Git更新的Git存储库的信息:
ab15ad1a3b..aa25c82427 master -> origin/master ef7435264c..5a294203ad next -> origin/next + f98c0007ae...e49ac33073 pu -> origin/pu (forced update) 0f4b6a451a..ff8db353a4 todo -> origin/todo * [new tag] v2.22.0-rc1 -> v2.22.0-rc1
同样,我们可以从右到左工作:
我的origin/master
是从他们的master
创建或更新的。我的origin/master
的值为 ab15ad1a3b
,但现在为aa25c82427
。由于存在一个值,因此它已被更新,而不是创建。
我的origin/next
已创建或更新,其他所有内容基本上都与上述相同(以明显的区别为模)。
我的origin/pu
已被强制更新,即,这不是快速转发,并且某些提交已被删除。来源是他们的pu
分支,而我的origin/pu
曾经是f98c0007ae
,但现在是ff8db353a4
。两个哈希ID之间存在三个点(其他行只有两个点)这一事实意味着更新是强制执行的,因此不是快速进行的。最前面的加号表示强制更新。 (显然,强制进行更新非常重要:为此,我发布了三个公告!)
我的origin/todo
已创建或更新,当我们到达左侧时,显然是更新。
我的v2.22.0-rc1
是根据他们的v2.22.0-rc1
创建或更新的;这是一个新标签。
每当您有一个新名称(分支,标记或任何其他引用)时,根据定义,它都是常规的非强制创建,并且没有可用的old..new
哈希,因此左边缘将显示{{1 }}。
* [new whatever]
很特殊:所有更新都会写入FETCH_HEAD
,通常会清除之前的内容(但使用.git/FETCH_HEAD
或{{1} },-a
将会附加)。每个提取的引用都会在--append
中出现一行,给出:
git fetch
字符串引用的类型和名称及其来源:
FETCH_HEAD
不是标记为not-for-merge
的一行适合$ cat .git/FETCH_HEAD
aa25c82427ae70aebf3b8f970f2afd54e9a2a8c6 branch 'master' of git://...
[snipped for length]
脚本 2 进行钓鱼并将该哈希ID传递给{ {1}}或not-for-merge
。
1 远程跟踪名称(大多数Git称之为远程跟踪分支)是引用在您的存储库中,其全名以git pull
开头,并继续包含远程名称(在这种情况下为git merge
)和另一个斜杠,然后通常包含其余的分支(在该遥控器上看到的名称)。
引用只是分支,标记,远程跟踪名称,git rebase
等事物的通用名称:字符串格式的名称,通常以{开头{1}},它记住一个哈希ID。对于分支,名称记住的一个哈希ID是Git应该认为是该分支的 tip 的提交。对于标签,名称记住的一个哈希ID是提交的哈希ID,或者是包含附加信息(可能包括签名密钥)的带注释的标签对象的哈希ID。标记对象的哈希ID(通常是一次提交,尽管任何标记都可以指向Git的任何内部对象类型)。
Git通过 refspec 构建远程跟踪名称。您可以在运行refs/remotes/
时提供refspec。如果您没有提供refspec,但提供了origin
之类的远程名称,则Git会从您的配置中获取正确的refspec:
refs/stash
refs/
的标准配置始终具有完全相同的默认refspec,但是有一些有用的非标准配置,例如git fetch
创建的标准配置。您也可以制作自己完全怪异的refspec,尽管根据您的扭曲程度,某些组合会导致origin
无法正常工作。
2 好吧,无论如何,回到$ git config --get-all remote.origin.fetch
+refs/heads/*:refs/remotes/origin/*
是脚本时。为了在Windows上提高速度,它已经用C重新编码。
答案 1 :(得分:0)
第一行告诉您,提取操作在本地存储库中产生了一个新分支,并且您有了它的HEAD。第二个说新的分支设置为跟踪远程分支。 (您可以拥有与远程分支同名的本地分支,但不能跟踪远程分支。)
不一定在此处创建远程分支,但是例如可能已从其他开发人员上推了。