Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git:refname';硕士';含糊不清_Git - Fatal编程技术网

Git:refname';硕士';含糊不清

Git:refname';硕士';含糊不清,git,Git,我已经研究了所有其他模糊的refname问题,但似乎都没有帮助。为什么我会收到这个警告 $ git checkout master warning: refname 'master' is ambiguous. $ git show-ref master eef61c00da690f093063ac5a728e22fd21648104 refs/heads/master $ git branch -a checkers exercises * master $ git remote -v

我已经研究了所有其他模糊的refname问题,但似乎都没有帮助。为什么我会收到这个警告

$ git checkout master
warning: refname 'master' is ambiguous.
$ git show-ref master
eef61c00da690f093063ac5a728e22fd21648104 refs/heads/master
$ git branch -a
  checkers
  exercises
* master
$ git remote -v
$ 

TL;DR:将标记保存并删除为(请参见“”):


原始答复:

我看到的大多数来源(如)都指向相同的原因:

当你试图结帐一家当地分行时,你会得到一个

如果您创建了一个与远程标记同名的本地分支,则会发生这种情况
Git应该签出您的本地分支,但它却试图签出标记,结果弄糊涂了

最初导入几个树是有问题的,因为它们包含同名的分支和标记。此后,我们通过解决了许多此类问题

在您的情况下,您没有远程标记,但是像您的分支那样命名的本地标记就足够了

歧义在

,例如
master
heads/master
refs/heads/master
一个符号化的ref名称。例如,
master
通常指由
refs/heads/master
引用的提交对象
如果您碰巧同时拥有
头/master
标签/master
,您可以明确地说
头/master
告诉git您指的是哪一个。
当出现歧义时,
通过以下规则中的第一个匹配来消除歧义:

如果存在
$GIT\u DIR/
,这就是您的意思(这通常仅适用于
头部
提取头部
原始头部
合并头部
樱桃头

  • 否则,
    refs/
    (如果存在)
  • 否则,
    refs/tags/
    (如果存在)
  • 否则,
    refs/heads/
    (如果存在)
  • 否则,
    refs/remotes/
    (如果存在)
  • 否则,
    refs/remotes//HEAD
    (如果存在)
因此,请检查回购协议中的
master

而且
git签出头/master
始终有效。
警告:默认情况下,这将在中签出分支。见“”

要避免这种情况,并且仍然使用明确的ref,请键入:

git checkout -B master heads/master

这件事刚刚发生在我身上。不知怎的,我有一个包含sha的.git/master文件。不知道那是怎么回事,但当我删除它时,错误消失了。如果您仔细阅读接受的答案,这是“预期行为”,但如果您这样做,您将看不到.git/master,例如git show ref master,因为它遵循稍微不同的规则。

尽管这不适用于OP的情况,在意外地执行了
git分支原点/分支
而不是
git签出原点/分支
之后,我得到了一个
refname不明确
警告。这创建了一个名为
origin/branch
的本地分支,这使得它与远程分支不明确。解决此问题非常简单,只需
git branch-D origin/branch
(安全,因为
-D
在本地分支上运行)。

如果您错误地配置了两个同名的远程服务器,则此消息也会出现,这会造成歧义

检查
.git/config
文件。如果您有多个远程回购配置了相同的:

fetch=+refs/heads/*:refs/remotes/origin/*

您应该将其中一个名称更改为其他名称,例如:


fetch=+refs/heads/*:refs/remotes/other_repo/*

如我在问题中所述,此repo只有一个主分支,没有远程分支。您链接到的问题中的用户遇到远程和同名分支的问题。是否有名为“master”的标记?是否有名为“master”的文件?防止此问题的一种方法是在代码库/组织中建立一种约定,以确保从不创建重叠引用。我使用以下命令:对于非原始本地分支,使用:
local-/master
。对于发布分支和标记,对发布分支使用
release/1.x.x
(即git flow feature freeze)和对部署/发布代码进行标记时使用
release tag/1.1.0
,并禁止命名分支
release
release tag
或源名称。refs的搜索顺序很有帮助
$GIT_DIR/master
确实是出于某种原因而存在的(不知道它指向什么,也不知道它是如何创建的)。删除它修复了警告。@Max,这正是我的问题——有人制作了一个.git/master文件(其内容是一个散列,指向几转前的master文件),并对其重命名修复了警告。谢谢谢谢所以我的修正是
git-tag-tag-master;git tag-d master
(这也很有帮助:)@AshutoshJindal太棒了!我在答案中加入了您的评论以提高可视性。这是由于您忘记了update ref命令的“refs/heads”部分造成的(对我来说无论如何都是)。看我的答案,这是我的问题
git checkout master
正确加载了分支,
git diff master staging
使用了古老的参考,这让我感到困惑。这是我的解决方案。我花了很长时间才意识到,在运行
find.git-iname master
之后,我终于注意到了它。这已经不止一次发生在我身上了,这是我删除
master
分支时最令人沮丧和困惑的症状,但在执行
git rev parse master
时它仍然会出现,谢谢!你的回答解释了我做错了什么。
warning: refname 'branch-name' is ambiguous
git checkout -B master heads/master