如何删除git引用`refs/original/refs/heads/master`?

Xiè*_*léi 45 git gitg

黄色圆框里是什么?

截屏

我试过了git branch -Dgit tag -d但没有一个成功。那么如何删除呢?

Ale*_*Ten 117

这个命令应该可以工作

git update-ref -d refs/original/refs/heads/master
Run Code Online (Sandbox Code Playgroud)

  • +1:你应该*总是*使用`git update-ref -d`而不是仅仅`rm`ing ref - 否则可能会发生不好的事情。 (15认同)
  • @wahnfrieden 因为 git 可以使用打包的 refs 并且 `refs` 目录中将没有相应的文件 (6认同)
  • 这应该是公认的答案 (3认同)

chu*_*utz 21

这是一个参考。通常由git filter-branch- 它是一个指向你的分支在你运行之前所在位置的指针git filter-branch

要删除任何引用,您始终可以在本地存储库中向其推送任何内容:

git push . :refs/original/refs/heads/master
Run Code Online (Sandbox Code Playgroud)

其他答案也很好地涵盖了其他删除方式。

  • “不推送任何内容”在本地删除引用非常聪明。 (2认同)

Ste*_*ngs 13

Alexey Ten 对此有更好的答案,因为它处理分支、标签和打包的引用。未来的访问者应该在此之前尝试该解决方案。


如果是标签,则以下命令应该可以工作:

git tag -d refs/original/refs/heads/master
Run Code Online (Sandbox Code Playgroud)

但是,既然你已经说过它没有,你可以从.git目录中删除该文件。从存储库根目录,这样的命令将得到它:

rm .git/refs/tags/refs/original/refs/heads/master
Run Code Online (Sandbox Code Playgroud)

如果git-tag命令失败,路径可能略有不同,因此您可能希望cd .git/refs通过反复试验找到有问题的头。删除文件将从本地存储库中删除引用。

  • 使用 `git update-ref` 而不是手动改变 Git 的内部结构。见阿列克谢的回答。 (4认同)
  • 它不是标签,但是,我发现它是`.git/refs/original/refs/heads/master`。 (2认同)