【发布时间】:2010-02-26 15:52:08
【问题描述】:
在 Git 中,“删除”分支是什么意思?
它会从存储库中消失吗?还是可以通过git branch 导航到?
我真正想做的是将一个分支标记为“死胡同”,即该分支离 master 太远了,没有人应该把它作为起点,尽管那个分支有一些好主意,所以我们想保留它,以供参考。
【问题讨论】:
标签: git branch git-branch
在 Git 中,“删除”分支是什么意思?
它会从存储库中消失吗?还是可以通过git branch 导航到?
我真正想做的是将一个分支标记为“死胡同”,即该分支离 master 太远了,没有人应该把它作为起点,尽管那个分支有一些好主意,所以我们想保留它,以供参考。
【问题讨论】:
标签: git branch git-branch
你可以删除分支,但先标记它,这样它的历史就不会消失。这样,分支不会出现在分支列表中,这有望阻止人们对其进行处理,但工作不会被永久删除(即使在运行垃圾收集之后)。例如,每当我有一个分支变得无关紧要,但我不准备永久删除它时,我将其标记为“archive/branch-name>”。
在master 或其他一些分支上:
git tag archive/foo foo
git branch -D foo
这会在删除 foo 之前从 foo 分支创建一个名为 archive/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
现在分支又回来了,就好像它从未被删除一样。
【讨论】:
git push 的--tags 选项)然后删除远程分支(在推送时使用:<branch-to-delete> refspec)与远程仓库一起使用)。例如:git tag archive/foo foo; git branch -D foo; git push --tags origin :foo
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
或者,您可以为已弃用的分支创建一个单独的存储库,将它们拉过来,然后从原始分支中删除它们。在任何一种情况下,您都会影响关注分支的任何用户——他们的存储库的内容不会改变(他们的任何分支名称也不会改变),但如果他们再次尝试拉取,他们会必须更改其配置中的目标。
【讨论】:
git branch -D <branchName> 将从存储库中删除您的分支。您将无法再看到它或导航。此外,您将丢失在该分支中所做的所有文件更改。
【讨论】:
它不能通过 git 分支导航,并且在执行垃圾收集之前,它不会从存储库中丢失。
如果您想将相关分支标记为死胡同,那么只需这样做(git 可能不会为您执行此操作,但您当然可以)!
将其(以您喜欢的任何方式)标记为历史参考作品。
【讨论】: