Git 存储在ref/heads外部的ref是否可以视为一个分支,并作为一个正常分支签出和处理?

Git 存储在ref/heads外部的ref是否可以视为一个分支,并作为一个正常分支签出和处理?,git,branch,git-checkout,git-notes,Git,Branch,Git Checkout,Git Notes,现在,我不知道一个ref是否只有在ref/heads内部才被认为是分支,事实上,这个问题之前的标题是。因此,我不确定存储在refs/heads外部的ref是否仍然可以称为“适当的分支”,但关键是: 假设我有一个提交的ref,就像所有正常分支一样,但存储在ref/heads之外;例如,使用git注释添加的注释以这种方式存储,默认情况下存储在ref-refs/notes/commits中 在某种程度上,它仍然可以像正常的分支一样被检出(不进行分离的头部检出),然后像正常的refs/heads分支一样

现在,我不知道一个ref是否只有在ref/heads内部才被认为是分支,事实上,这个问题之前的标题是。因此,我不确定存储在refs/heads外部的ref是否仍然可以称为“适当的分支”,但关键是:

假设我有一个提交的ref,就像所有正常分支一样,但存储在ref/heads之外;例如,使用git注释添加的注释以这种方式存储,默认情况下存储在ref-refs/notes/commits中

在某种程度上,它仍然可以像正常的分支一样被检出(不进行分离的头部检出),然后像正常的refs/heads分支一样使用其他git命令(rebase、cherry-pick等)进行处理吗

我知道正常的
git签出
只会将其作为提交签出,从而使存储库处于分离状态

我确实找到了一种似乎有效的方法,那就是:

git symbolic-ref HEAD refs/MyUnusualRefPath/MyUnusualRef
git checkout -f HEAD
显然,这次我能做我必须做的事情,但我想知道这是否是一个受支持的,或某种程度上受支持的,或至少“现在它运行良好”的操作,以及我是否能在将来依赖它并建议其他人使用它

我试图查看git checkout的源代码,但过了一段时间,很明显我最好在Stack Overflow中发布一个问题(当然,我以前在web上搜索过)。
事后看来,研究(整个)git源代码可能需要更少的时间

我确实需要这件事来解决存储库之间共享(可怕的实现/记录)注释的问题,但请不要关注这一点,只回答我的上述问题,或者忽略它,让其他了解它的人回答。

一个适当的分支(意思不是一个分离的头)是存储在refname中的提交,由HEAD直接引用。
这意味着refname(它又包含实际的提交)。另见“

这就是为什么在这里工作

您可以将该引用存储在
refs/
中的任何位置,但

  • 如“”中所述,git将只在
    refs/
    中的几个选定位置查找该ref
  • 列出的分支可能不包括该引用。
    请参阅(有关提交的git 2.7)
默认情况下,我们也按“refname”排序。
由于“HEAD”在字母上位于“refs/…”之前,因此我们最终得到一个由“HEAD”ref组成的数组,然后是本地分支,最后是远程跟踪分支

新代码似乎只在
refs/heads/…
refs/remotes/…


注意:只有Git 2.11+会检测并抵制带有Git_DIR/refs的符号链接,这将使名称解析循环永远存在

参见(2016年10月6日)作者。

(由in合并,2016年10月17日)

@MichaWiedenmann阅读问题的最后一段您的最后一句话不太清楚,但您的意思是从远程(即不在本地回购)获取新作品,然后查看它吗?
git-fetch&&git-checkout-fetch\u-HEAD
对你有用吗?@ray不,我不是说,不管怎样,我的最后一句话只是想给出一个上下文,我真正想解决的是以下疑问:是否有一种受支持的或某种受支持的方法来签出头部存储在refs/heads之外的分支,如果是这样的话,那是什么方法?不必担心是什么问题让我想知道这个,现在我想知道的只是这个。我不确定你在这里使用的术语是否正确。根据定义,git分支是对提交的引用,git存储分支引用的位置位于
refs/heads
(或
refs/remotes/
)。如果它不存储在refs下,那么它就不是git中的分支。我不清楚你想做什么。关于你提到的笔记,它们不是分支,而是提交。如果你愿意的话,你可以签出一个并把它做成一个分支。。。在我看来,这有点奇怪,我不明白,但是如果你想,只要
git checkout-b
。非常感谢,终于有了一个正确的答案,当我看到它时,我简直不敢相信:D(顺便问一下,是你删除了所有的评论吗?)上面写着:一个正确的分支(意思不是一个分离的头)是存储在HEAD直接引用的refname中的命令。这似乎不对,我相当肯定分支即使不是当前分支,也会保持分支。也许你指的是当前分支,或者更确切地说,你描述的是git认为或似乎认为你处于“适当的分支”(不是处于分离的头部状态)的情况。。。?(继续)无论如何,我继续我的研究(当然从你发布的链接开始),我发现了很多提示,只有ref/heads/*才被认为是正确的分支。在文档中,最值得注意的可能是:在:下:分支的尖端由分支负责人引用,在:下:负责人存储在$GIT_DIR/refs/Heads/(续)文件中,GIT维护者Junio C Hamano在2014年3月的另一篇几乎是权威性的文章中提到:根据定义,任何otuside refs/Heads/都不是分支。这几乎解决了问题,但我仍然希望找到更正式的东西。我已经在源代码和存储库中搜索了一些。我可能最终会发布我的答案。(继续)但如果你或其他人已经知道:1。一个更好的分支和2的官方定义。最重要的是,确定非ref/heads ref存储在HEAD中时是否可以可靠地操作,就好像它是一个正确的分支一样-请发布它,我会接受这个答案,我不想接受我的答案。