Git分支删除


79

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

它会从存储库中消失吗?还是可以通过via导航git branch

我真正想做的是将一个分支标记为“死胡同”,即该分支距离主节点太远了,尽管该分支下有一些好主意,但没人可以以此为起点。喜欢保留它,以供参考。

Answers:


157

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

master其他分支上时:

git tag archive/foo foo
git branch -D foo

archive/foofoo在删除之前从分支创建一个标记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

现在该分支又恢复了,好像从未删除过一样。


5
@sardaukar:这也可以与远程仓库一起使用,方法是推入存档标记(使用的--tags选项git push),然后删除远程分支(推入时使用refspec :<branch-to-delete>)。例如:git tag archive/foo foo; git branch -D foo; git push --tags origin :foo
Dan Moulding

如果人们试图从已归档的分支中拉出,但如果没有,git如果能够自动通知人们“该分支已被归档”并显示提交消息,那就太好了。
罗宾·格林

1
很好的答案,正是我想要的!可以肯定的是,如果该分支在删除之前已经合并回主服务器,这是否有用?
claf 2012年

另一个相关的问题(如果有人仍然遵循该主题)是,如果该分支中涉及多个开发人员,我应该如何“关闭”(合并到主文件或标签中的文件等)中?删除和标记分支(本地和远程)对这个分支的其他开发人员不是很粗鲁吗?
claf 2012年

1
这个答案是一个伟大而出色的解决方案
Christopher Thomas

2

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

另外,您可以为已弃用的分支创建一个单独的存储库,将它们拉开,然后从原始分支中删除它们。在这两种情况下,您都将影响跟随分支的所有用户-其存储库的内容不会更改(其分支名称也不会更改),但是如果他们尝试再次拉出,则它们会必须更改其配置目标。



0

它无法通过git分支进行导航,并且在执行垃圾回收之前,它不会从存储库中丢失。

如果您要将有问题的分支标记为死胡同,则只需这样做(git可能不会为您这样做,但是您当然可以)!

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.