删除/隐藏git分支而不删除提交历史记录

时间:2014-08-06 20:18:59

标签: git git-branch git-branch-sculpting

情况:

我有一个带有主开发分支的主仓库,并且有许多“实验”分支从中萌芽(例如exp1exp2)。这些实验分支的目的是作为产生数值结果的实验​​的占位符。我记录了实验分支的分支名称(和提交ID),因此我可以返回到提交,以准确查看结果背后的代码和历史记录。

但是,现在,有很多实验分支,很难看到主树。所以,我正在重新思考将占位符保留在每组结果背后的代码(即每个实验)的策略。显然我可以在每个分支上保存工作目录,但是保留提交历史也很好。

可能的解决方案:

解决此问题的一种方法是将实验分支移动到它们自己的独立存储库中,每个存储库都以dev分支的提交历史记录中的相应节点的子节点为根。以下是我的意思:

enter image description here

点击here查看更大版本的图片(在imgur.com上)。

因此,例如,对于分支exp1,我想将提交A->B->C导出到以提交A为根的单独repo。然后,我可以记录提交P1的哈希值,以便我知道exp1分支的来源。

问题:

我该怎么做?

更好的问题:

另一方面,我强烈怀疑有一个更好的策略来做我想做的事情 - 即整理树进行目视检查,但将占位符保留在先前的分支上,以便我可以在需要时返回它们。那么,有人可以为此推荐一个策略吗?

1 个答案:

答案 0 :(得分:17)

以下是另一种选择:在删除分支名称之前使用非分支引用来保存分支提示。

由于这些是非分支引用,因此它们不会显示在git branch输出中,也不会显示在git log --branchesgitk --branches显示的内容中。但是,它们将显示在--all列表中,并将保留存储库对象。

要创建或更新非分支参考,请使用git update-ref。在refs/中选择一个您认为不会与以后使用相冲突的名称空间(当前使用的分支为refs/heads/,标记为refs/tags/,远程分支为refs/remotes/,注释为refs/notes/,存储为refs/stash