删除 Git 分支但不删除提交记录

3

我通常在两个分支上工作:主分支和主页构建分支。最近有人告诉我要检出一个早于我参与项目的旧提交。我只需执行以下操作:

 git checkout [commit number]

然后,我决定将这个旧的提交变成一个分支,做法如下:
 git checkout -b old_homepage

现在,我意识到我不需要再引用分支old_homepage了,但我仍然希望它存在作为一个提交。我该如何保留这些提交,但在我输入以下命令时删除该分支的显示:

 git branch

你的意思是想将你在要删除的分支上的提交与主分支合并吗? - learnvst
假设提交是master(或任何其他分支)的祖先,只要分支没有以非快进方式更改,提交就不会消失。 - Uwe Kleine-König
3个回答

11
我认为你实际上想问的是:“如果我执行git branch -d old_homepage,提交记录会丢失吗?” 答案是:“删除名称仅会删除名称本身;只要您可以在git log --all中看到它们,提交记录本身就会保留下来,实际上甚至更久。”
为了更好地可视化这一点,请运行类似于gitk --all或gitk --tags的内容(尝试在某些复杂的git repos上使用两个命令)。滚动查看提交记录。现在想象在任何提交记录上贴一个便利贴,那就是“标签”或“分支”名称。将便利贴取下来,提交记录仍然存在,对吧? :-)
这就留下了一个显而易见的问题:什么时候像提交记录这样的东西才会被删除?答案是:只有当您删除导致它们的所有名称时才会删除它们。gitk命令(与大多数其他git命令一样)从名称HEAD开始。如果您给它--all,它会添加它能找到的所有分支名称。如果您给它--tags,它会添加它能找到的所有标签名称。然后,它向后工作,查看每个提交以查看它引用的其他提交。
只有在没有办法从其中一个明显的名称开始并向后工作才能找到它们时,Git才会删除事物(提交记录等)。 (即使在这种情况下,它也会等待很长时间,默认为30到90天。)因此,如果您向旧提交添加分支或标签标签,您可以通过名称找到该提交编号的新明显名称;但是,只要它不是唯一的按名称查找的方式,就可以安全地将其删除。

1
这是正确的答案。如果旧提交在某个分支的历史记录中,它不会消失。如果您喜欢,可以为其打标签以便更轻松地访问,但出于保留目的,这并非必需。只要您不以导致该提交变成孤立状态的方式重写分支的历史记录(您可能需要尝试才能做到这一点),只要有某个分支包含它,该提交就会存在。 - wadesworld
谢谢,torek!那正是我想问的问题。 - Rustavore

3
您可以为提交打标签:
$ git tag <tagname> <commit-hash>

由于标签引用的是提交,因此它不会被垃圾回收。


0

我不太确定,但在那种情况下,通常会使用一个标签。

git tag <some-name> <commit-id>

它不会显示在git-branch中,但git-tag会显示它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接