2013-03-15 115 views
2

一段时间后删除一个Git分支,我曾在使用Git在这个不同寻常的方式:我如何使用`git的合并--squash`

  1. git checkout -b feature123
  2. 微小的编辑,提交,重复
  3. git checkout master
  4. git merge --squash feature123
  5. git log --oneline使用输出来填充提交信息,像这样:
 
Implement feature 123, floobing the brob 

Long, detailed description here. 

     f5d1b77 REFACTOR: Extract Method 
     1c1346e REFACTOR: Rename `A` to `B` 
     63457de etc. 
     884fga1 floob 

我特别喜欢重构的工作模式,直到行为的改变,我想创建是微不足道的。在任何时候,如果我陷入困境,我可以回到我最后一次的良好承诺。阅读我的提交历史很容易,因为行为改变是分开的,行为改变是简单明了的。

我在使用Source Depot在Microsoft工作时捡到了这种习惯。我可以对一个分支进行一系列微小的提交,并将分支合并为一个提交。我们有一个gui工具(类似于gitk),它会显示合并提交,其旁边有一个+。如果我想要的话,我可以扩展并查看细节。非常好。我试图在Git中重复这一点。

如果我想深入细节,GitHub会让这些提交SHA进入单个提交的链接。但是,它只是对一些提交进行的,其余的不会成为链接。

enter image description here

这显然是在Git中工作的一个不寻常的方式。这些工具不太可能改进,其他程序员在看到它时可能会感到困惑。

通常,在合并Git特性分支之后,您可以将其删除 - 没有太多理由保留它。但在这种情况下,如果我删除分支,单个提交将消失,并且您无法在GitHub中单击它们。所以那些旧的分支混乱了事情,即使它们没有用处。 我该如何摆脱它们?

也许一些魔术咒语的咒语?

+3

您可以使用'git tag tagname branchname'将一个标签放在您想摆脱的每个分支的末尾。这样他们仍然可用,但没有出现在分支机构名单中,也不会混淆主分支机构的直接历史。尽管如此,这可能仍然会妨碍您的工作,特别是如果您将标签用于其他事情。 – 2013-03-15 01:53:16

回答

4

据我了解你的意图,你的观点是根据需要有一个简单的历史细节。

如果你做一个压扁合并会有(除非你添加一些明确REF)是访问原始提交和git会(最终)清理那些不可达的提交没有直接的方法。

因此,你需要一种方法来存储原始分支的裁判。这样做最自然的地方就是合并提交本身,其结果完全是非合并的合并。

所以我的建议是做一个普通的合并和显示你的历史的时候,就像在gitk --first-parent筛选重要的提交。这将只显示你在主分支上的提交,并留下任何一侧的分支。 (即在第一种方法中消除合并时你会摆脱的那个。)