【问题标题】:Delete git branch by anything, not name用任何东西删除 git 分支,而不是名称
【发布时间】:2018-10-26 04:42:07
【问题描述】:

我在删除 git 分支时遇到问题。起初我可以使用“git checkout -b ....”来创建它。但在我看来,我写错了,打错了,然后退格。这导致该分支的名称错误。

我能够在这个分支上工作,甚至将它推送到远程,但它会产生奇怪的行为(在 Web 界面中看不到分支)。

git branch -r 给我看

origin/master
origin/rrseria_test_utility

在 web 界面(bitbucket)中,我可以在提交中看到这个分支,名称如下

rrseriaÅl_test_utility

请注意,大写的 A 不仅仅是 A,而是上面有圆圈的 A。好像是 utf-8 字符 'U+00C5'。

当我尝试删除它时,然后

git branch -d rrseria_test_utility
error: branch 'rrseria_test_utility' not found. 

git checkout rrseria_test_utility
error: pathspec 'rrseria_test_utility' did not match any file(s) known to git. 

你能帮我如何删除这个分支吗?

【问题讨论】:

  • 你不能只输入git branch -d rrseria 并使用TAB 来自动完成吗?还是复制/粘贴 Å 字符?或者您可以删除 .git/refs/heads/ 目录中的分支目录。

标签: git git-branch


【解决方案1】:

您可以使用git branch --list rrseria* 仅列出名称以rrseria 开头的分支。如果有多个,您可以使用更具体的模式,将* 通配符用于非 ASCII 字符 (rrseria*l_test_utility f.e.)。

此命令显示要删除的分支的名称。

如果您使用的是 Linux 或 macOS,则可以使用其输出创建 Git 命令以删除该分支:

git branch -d $(git branch --list rrseria*)

或者您可以使用鼠标从git branch --list 的输出中复制终端窗口中的分支名称并将其粘贴(回到终端窗口)以创建git branch -d 命令。

或者您可以使用您喜欢的文件管理器在.git/ref/heads 目录中导航并删除名称与分支名称匹配的文件(这是git branch -d 在后台执行的操作)。

之后,您必须将删除推送到远程存储库:

git push origin --prune refs/heads/*

如果您有多个遥控器,请为每个遥控器重复上述命令(输入其名称而不是 origin)。

【讨论】:

  • 您也可以使用上面介绍的技术(shell 命令行替换、复制粘贴、文件操作)将分支重命名为您想要的名称,而不是删除它。只是不要忘记在重命名或删除后运行git push --prune 命令,将更改也发送到遥控器。
  • 嗯...在我的情况下git branch --list partialname* 列出工作并向我展示了分支,但没有删除...也导航到.git/refs/head 没有显示...?是时候放弃并删除文件夹并从头开始检查项目了吗? :P
猜你喜欢
  • 2011-06-01
  • 2016-02-23
  • 1970-01-01
  • 2011-09-13
  • 2011-03-17
  • 1970-01-01
  • 2020-11-13
  • 1970-01-01
  • 2014-09-29
相关资源
最近更新 更多