Git 分支文件位置

Git branch file location

我的本地系统上有将近一百个分支,其中大部分都已过时。我想打开包含所有分支的文件,这样我就可以轻松删除其中的大部分,而不是费力地一个一个地删除分支。有没有办法做到这一点?一个我们可以打开以查看所有分支的文件?

在 git 中,您没有一个包含分支列表的文件,而是一个包含每个分支一个文件的目录,并以它命名。

它是 .git/refs/heads,例如你的主分支包含文件 .git/refs/heads/master(无扩展名),其内容是提交哈希 master 当前指向。

(注意名称中带有斜杠的分支:它们将被拆分到特定目录中,即分支 feature/new-homepage 的文件将位于子目录 feature 中, 并命名为 new-homepage)


此外,也许检查 packed refs。要么在你的 repo 上使用它,要么检查是否有人已经打包了一些 refs。

Git 中的每个分支都由一个文本文件表示,其中包含该分支中 最新 提交的 SHA-1。这些文件称为 "references".

您可以看到分支 refs 的路径以及它们指向的相应提交 SHA-1 说:

git show-ref --heads

这将 return 类似于:

923eccb90415758c74bb3418007bf5691a0d4a1c refs/heads/some-branch
60e2e7f120f5410ec0ba97fa5093bae4dba4ee57 refs/heads/master

现在,如果您愿意,您可以删除分支引用,方法是:

rm .git/refs/heads/some-branch

但我不建议直接破坏存储库的内部结构;相反,您应该使用 Git 自己的命令来执行此操作。

例如,假设您要删除所有以单词 feature- 开头的分支。你可以说:

git branch --list 'feature-*'

获取匹配的分支名称列表。从那里,您可以通过说删除这些分支:

git branch --list 'feature-*' | xargs git branch -D

其中 -D 选项告诉 Git 删除分支,无论是否已合并到当前分支。