我应该如何读取消息 a git fetch returns?
How should I read the message a git fetch returns?
我刚刚做了
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
下创建的新分支吗?
我不确定我对以下内容的理解是否正确:feature/8067 -> origin/feature/8067
第 2 列是 <nameOfBranchOnRemoteRepo>
而第 3 列是 <repoName/nameOfBranchOnRemoteRepo>
并且它说我在 refs 中获取的远程分支指向远程中的那个?
第一行告诉您,提取在您的本地存储库中产生了一个新分支,并且您有它的 HEAD。第二个说新分支被设置为跟踪远程分支。 (您可以拥有一个与远程分支同名的本地分支,但不跟踪远程分支。)
远程分支不一定是在那里创建的,但可能是从其他开发人员那里推送的,例如。
获取输出即使是老手也会感到困惑。这是我解码它们的方法:
* 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
结尾。您的remote-tracking姓名1origin/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
那里得到了 created-or-updated。我的 origin/master
的值是 ab15ad1a3b
但现在是 aa25c82427
。因为有一个值,所以它是更新的,而不是创建的。
我的origin/next
一直是created-or-updated,其他基本和上面一样(取模明显差异)。
我的 origin/pu
已被强制更新,也就是说,这不是 fast-forward 并且一些提交已被 删除 。来源是他们的 pu
分支,我的 origin/pu
曾经是 f98c0007ae
但现在是 ff8db353a4
。事实上,两个哈希 ID 之间有三个点——其他行只有两个点——意味着更新是强制的,因此不是 fast-forward。最前面的加号表示强制更新。 (显然,强制更新非常重要:我有 三个 的公告!)
我的origin/todo
一直是created-or-updated,等到左边的时候,明显是更新了
我的 v2.22.0-rc1
已经 created-or-updated,来自他们的 v2.22.0-rc1
;这是一个新标签。
任何时候你有一个新名称(分支、标签或任何其他引用),根据定义,它是一个常规的 non-forced 创建并且没有可用的 old..new
哈希,因此左边缘将阅读 * [new whatever]
.
FETCH_HEAD
是特殊的:所有 更新被写入 .git/FETCH_HEAD
,通常会清除其中之前的任何内容(但 -a
或 --append
、git fetch
将改为追加)。每个获取的引用都会导致一行出现在 FETCH_HEAD
中,给出:
- 散列 ID
- 一个可选的
not-for-merge
字符串
引用的类型和名称及其来源:
$ cat .git/FETCH_HEAD
aa25c82427ae70aebf3b8f970f2afd54e9a2a8c6 branch 'master' of git://...
[snipped for length]
未标记not-for-merge
的一行适合git pull
脚本2钓鱼输出并将该哈希 ID 传递给 git merge
或 git rebase
.
1A remote-tracking name,其中大多数 Git 调用 remote-tracking branch,是你仓库中的一个 reference,它的全名以 refs/remotes/
开头,然后包括远程名称,在此大小写 origin
和另一个斜杠,然后通常保留 分支 名称的其余部分,如在该遥控器上看到的那样。
A reference 只是分支、标签、remote-tracking 名称、refs/stash
等事物的通用名称:a string-format name,一般以refs/
开头,记住一个hash ID。对于一个分支,名称记住的一个哈希 ID 是 Git 应该认为是该分支的 tip 的提交。对于标签,名称记住的一个哈希 ID 要么是提交的哈希 ID,要么是包含附加信息(可能包括签名密钥)的 带注释的标签对象 的哈希 ID ,加上标记对象的哈希 ID(通常是提交,尽管任何标记都可以指向任何一种 Git 的内部对象类型)。
Git 通过 refspec 构建 remote-tracking 名称。当您 运行 git fetch
时,您可以提供一个 refspec。如果您不提供 refspec,但提供远程 name,例如 origin
,Git 从您的配置中获取正确的 refspec:
$ git config --get-all remote.origin.fetch
+refs/heads/*:refs/remotes/origin/*
origin
的标准配置始终具有此确切的默认 refspec,但也有一些有用的非标准配置,例如 git clone --single-branch
创建的配置。你也可以制作你自己的完全奇怪的 refspecs,虽然这取决于你的扭曲程度,一些组合会导致 non-functioning git fetch
.
2好吧,那时候 git pull
还是一个脚本。 re-coded 在 Windows.
上的速度
我刚刚做了
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
下创建的新分支吗?
我不确定我对以下内容的理解是否正确:feature/8067 -> origin/feature/8067
第 2 列是 <nameOfBranchOnRemoteRepo>
而第 3 列是 <repoName/nameOfBranchOnRemoteRepo>
并且它说我在 refs 中获取的远程分支指向远程中的那个?
第一行告诉您,提取在您的本地存储库中产生了一个新分支,并且您有它的 HEAD。第二个说新分支被设置为跟踪远程分支。 (您可以拥有一个与远程分支同名的本地分支,但不跟踪远程分支。)
远程分支不一定是在那里创建的,但可能是从其他开发人员那里推送的,例如。
获取输出即使是老手也会感到困惑。这是我解码它们的方法:
* 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
结尾。您的remote-tracking姓名1origin/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
那里得到了 created-or-updated。我的origin/master
的值是ab15ad1a3b
但现在是aa25c82427
。因为有一个值,所以它是更新的,而不是创建的。我的
origin/next
一直是created-or-updated,其他基本和上面一样(取模明显差异)。我的
origin/pu
已被强制更新,也就是说,这不是 fast-forward 并且一些提交已被 删除 。来源是他们的pu
分支,我的origin/pu
曾经是f98c0007ae
但现在是ff8db353a4
。事实上,两个哈希 ID 之间有三个点——其他行只有两个点——意味着更新是强制的,因此不是 fast-forward。最前面的加号表示强制更新。 (显然,强制更新非常重要:我有 三个 的公告!)我的
origin/todo
一直是created-or-updated,等到左边的时候,明显是更新了我的
v2.22.0-rc1
已经 created-or-updated,来自他们的v2.22.0-rc1
;这是一个新标签。
任何时候你有一个新名称(分支、标签或任何其他引用),根据定义,它是一个常规的 non-forced 创建并且没有可用的 old..new
哈希,因此左边缘将阅读 * [new whatever]
.
FETCH_HEAD
是特殊的:所有 更新被写入 .git/FETCH_HEAD
,通常会清除其中之前的任何内容(但 -a
或 --append
、git fetch
将改为追加)。每个获取的引用都会导致一行出现在 FETCH_HEAD
中,给出:
- 散列 ID
- 一个可选的
not-for-merge
字符串 引用的类型和名称及其来源:
$ cat .git/FETCH_HEAD aa25c82427ae70aebf3b8f970f2afd54e9a2a8c6 branch 'master' of git://... [snipped for length]
未标记not-for-merge
的一行适合git pull
脚本2钓鱼输出并将该哈希 ID 传递给 git merge
或 git rebase
.
1A remote-tracking name,其中大多数 Git 调用 remote-tracking branch,是你仓库中的一个 reference,它的全名以 refs/remotes/
开头,然后包括远程名称,在此大小写 origin
和另一个斜杠,然后通常保留 分支 名称的其余部分,如在该遥控器上看到的那样。
A reference 只是分支、标签、remote-tracking 名称、refs/stash
等事物的通用名称:a string-format name,一般以refs/
开头,记住一个hash ID。对于一个分支,名称记住的一个哈希 ID 是 Git 应该认为是该分支的 tip 的提交。对于标签,名称记住的一个哈希 ID 要么是提交的哈希 ID,要么是包含附加信息(可能包括签名密钥)的 带注释的标签对象 的哈希 ID ,加上标记对象的哈希 ID(通常是提交,尽管任何标记都可以指向任何一种 Git 的内部对象类型)。
Git 通过 refspec 构建 remote-tracking 名称。当您 运行 git fetch
时,您可以提供一个 refspec。如果您不提供 refspec,但提供远程 name,例如 origin
,Git 从您的配置中获取正确的 refspec:
$ git config --get-all remote.origin.fetch
+refs/heads/*:refs/remotes/origin/*
origin
的标准配置始终具有此确切的默认 refspec,但也有一些有用的非标准配置,例如 git clone --single-branch
创建的配置。你也可以制作你自己的完全奇怪的 refspecs,虽然这取决于你的扭曲程度,一些组合会导致 non-functioning git fetch
.
2好吧,那时候 git pull
还是一个脚本。 re-coded 在 Windows.