84

在 Git 中,分支的“删除”是什么意思?

它会从存储库中消失吗?或者它仍然可以导航到 viagit branch吗?

我真正想做的是将一个分支标记为“死胡同”,即该分支离 master 太远了,没有人应该把它作为起点,尽管那个分支有一些好主意,所以我们会喜欢保留它,供参考。

4

4 回答 4

160

您可以删除分支,但先标记它,这样它的历史就不会消失。这样,分支不会出现在分支列表中,这有望阻止人们对其进行处理,但工作不会被永久删除(即使在运行垃圾收集之后)。例如,每当我有一个分支变得无关紧要,但我不准备永久删除它时,我将其标记为“存档/<分支名称>”。

master或其他一些分支上:

git tag archive/foo foo
git branch -D foo

archive/foo这会在删除之前创建一个从foo分支命名的标签foo。您还可以向标签添加一条消息,解释分支中的内容、它存在的原因、为什么它现在是死胡同等。

git tag -m 'Foo is deprecated in favor of bar' archive/foo foo

记录为什么一个分支被弃用的能力可能是标记而不是移动分支到备用命名空间的优势。

如果您需要恢复以这种方式存档的分支,它很简单:

git branch foo archive/foo
git tag -d archive/foo       # Optional

现在分支又回来了,就好像它从未被删除一样。

于 2010-02-26T18:06:46.070 回答
3

git branch -D <branchName>将从存储库中删除您的分支。您将无法再看到它或导航。此外,您将丢失在该分支中所做的所有文件更改。

https://git-scm.com/docs/git-branch

于 2010-02-26T15:55:02.873 回答
3

Git 分支存储为对修订的引用。如果删除分支,则删除引用;如果没有其他内容引用该修订,它最终将被垃圾收集。此外,如果您删除分支,那么它会正确消失(从您的存储库中)。如果要将分支标记为已弃用但保留以供以后使用,可以将分支移动到子目录:

$ git branch
* master
  testing_feature_one
  testing_feature_two
$ git branch -m testing_feature_one deprecated/testing_feature_one
$ git branch
  deprecated/testing_feature_one
* master
  testing_feature_two

或者,您可以为已弃用的分支创建一个单独的存储库,将它们拉过来,然后从原始分支中删除它们。在任何一种情况下,您都会影响任何关注分支的用户——他们的存储库的内容不会改变(他们的任何分支名称也不会改变),但如果他们再次尝试拉取,他们会必须在配置中更改目标。

于 2010-02-26T16:15:01.697 回答
0

它不能通过 git branch 导航,并且在执行垃圾收集之前,它不会从存储库中丢失。

如果您想将相关分支标记为死胡同,那么只需这样做(git 可能不会为您执行此操作,但您当然可以)!

将其(以您喜欢的任何方式)标记为历史参考作品。

于 2010-02-26T16:29:30.417 回答