git删除分支而不删除提交

时间:2012-03-29 19:22:48

标签: git

我通常使用两个分支:master和homepage_buildout。最近我被告知在我开展项目之前检查一个旧的提交。我只是做了:

 git checkout [commit number]

然后我决定让这个旧提交成为一个分支:

 git checkout -b old_homepage

现在,我意识到我不再需要能够引用分支old_homepage,但我仍然希望它作为提交存在。如何保留这些提交,但在键入时删除分支:

 git branch

3 个答案:

答案 0 :(得分:9)

认为你实际上要问的是:“如果我git branch -d old_homepage提交会丢失”,答案是:“删除名称只会删除 name ;只要您在git log --all中看到它们,实际上甚至更长时间,它们就会自行保留。“

为了更好地将其可视化,请运行类似gitk --allgitk --tags的内容(尝试使用某些复杂的git repos)。滚动提交。现在想象一下在任何提交上粘贴便条。这是一个“标签”或“分支”名称。取下粘滞便笺。承诺仍在那里,对吧? : - )

这留下了一个显而易见的问题:什么时候提交实际上会消失?答案是:只有在您删除了所有所有的名称之后。 gitk命令(与大多数其他git命令一样)以名称HEAD开头。如果你给它--all,它会添加它可以找到的所有分支名称。如果你给它--tags,它会添加它可以找到的所有标记名称。然后它向后工作,查看每个提交以查看它引用的其他提交。

当没有办法找到它们时,Git会删除东西(提交等),从这些明显的名字开始并向后工作。 (即使这样,它会等待很长时间,默认情况下为30到90天。)因此,如果您将分支或标记标签添加到您通过执行git log找到的编号的旧提交中,那么会为您提供一个新的该提交号的明显名称;但是再次删除它是安全的,只要它不是唯一的方式来查找它。

答案 1 :(得分:3)

您可以标记提交:

$ git tag <tagname> <commit-hash>

由于标记引用了提交,因此不会对其进行垃圾回收。

答案 2 :(得分:0)

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

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

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