如果合并一个分支然后删除它,它的提交会被垃圾收集吗?

Ste*_*hen 7 git garbage-collection

我想在这里检查一下我对 Git 垃圾收集的理解。

假设你有两个分支:master 和 newidea。在某个时刻,您将 newidea 合并到 master 中,并删除分支 newidea。

你在 newidea 上所做的提交永远不会被垃圾收集,因为由于合并,它们现在成为了 master 树的一部分,对吗?

相比之下,如果您从未合并过,那么这些相同的提交最终将被垃圾收集,因为它们不再可以从活动分支访问。

我有这个权利吗?

JDB*_*JDB 6

是的,你是对的1。孤立提交...未由分支或标记引用的提交将在一定(可配置)时间长度后被垃圾收集。

\n\n

由分支或标记直接引用或通过另一个引用的提交的提交历史记录间接引用的提交将被保留,并且不会被垃圾收集。

\n\n

垃圾收集的不仅仅是提交。各种管道命令可以创建由于各种原因可能不会被提交引用的文件和树。这些对象也将被垃圾收集。

\n\n

有关更多信息,请参阅 的文档git-gc,特别是:

\n\n
\n

git gc尽力不删除存储库中任何地方引用的对象。特别是,它不仅会保留当前分支和标签集引用的对象,还会保留索引、远程跟踪分支、git filter-branch 在 refs/original/ 或 reflogs 中保存的引用引用的对象(这可能是分支中的引用提交后来被修改或回滚)。如果您希望删除某些对象,但它们不是\xe2\x80\x99t,请检查所有这些位置并确定在您的情况下删除这些引用是否有意义。

\n
\n\n
\n\n

1一个警告:虽然标准git merge将保留对两个源提交的引用(从而保留两个分支中的提交,即使源分支最终被删除),但还有其他方法可以“合并”不会保留的提交/分支对原始提交的引用,例如 agit cherry-pickgit rebaseagit merge --squash。如果您使用这些命令之一,则在删除问题分支后,您将保留原始提交的实质内容(内容、作者、日期等),但不会保留提交本身。

\n\n

另请注意,即使您使用合并和压缩等,某些 git 服务器(如 GitHub)实际上会为 PR 创建影子分支,因此虽然原始提交可能会在本地计算机上进行 gc-ed,但它们可能会继续存在于服务器。

\n