2012-03-29 106 views
2

我有两个分支,我通常工作:master和homepage_buildout。我最近被告知要在开始项目之前签出一份旧的提交。我压根儿:git删除分支没有删除提交

git checkout [commit number] 

于是我决定把这个老犯的一个分支,像这样:

git checkout -b old_homepage 

现在,我意识到,我并不需要能够引用分支old_homepage了,但我仍然希望它作为提交而存在。如何留住这些提交,但出现去除分支当我输入:

git branch 
+0

你的意思是你想合并你想要删除的分支上的提交与主? – learnvst 2012-03-29 19:27:14

+0

假设提交是“master”(或任何其他分支)的祖先,只要分支没有以非快进方式更改,提交就不会消失。 – 2012-03-29 22:31:14

回答

8

认为你实际上问下沸腾到:“如果我做git branch -d old_homepage将提交迷路”,得到的答复是:“删除该名称只删除;在提交自己的坚持只要你能在git log --all看到它们,实际上甚至更长。“

为了更好地形象化,运行一些类似于gitk --allgitk --tags(尝试在一些复杂的git仓库上)。滚动查看提交。现在想象一下,在任何提交上贴上便条。这是一个“标签”或“分支”名称。取下粘滞便笺。承诺仍然存在,对吗? :-)

这留下了一个明显的问题:什么时候做提交实际上走开?答案是:只有在删除全部后才能导致它们的名称。 gitk命令(与大多数其他git命令一样)以名称HEAD开头。如果你给它--all它添加它可以找到的所有分支名称。如果你给它--tags它添加它可以找到的所有标签名称。然后它向后工作,查看每个提交以查看它引用的其他提交。

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

+1

这是正确的答案。如果旧的提交在某个分支的历史中,它不会消失。如果您希望更容易访问,您可以对其进行标记,但对于保留目的来说不是必需的。只要你不重写分支的历史记录就会导致这个提交变成孤立的(你可能不得不试图去实现它),只要有一些提交就会提交它有其历史上的分支。 – wadesworld 2012-03-31 11:22:22

+0

谢谢,torek!这正是我的问题。 – Rustavore 2012-04-01 21:49:56

2

您可以标记提交:

$ git tag <tagname> <commit-hash> 

由于标签引用承诺,它不会让垃圾-集。

0

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

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

git-branch它不会出现,但git-tag将显示它。