使用`git merge --squash`后如何删除git分支

时间:2013-03-15 01:47:21

标签: git github

有一段时间,我以这种不同寻常的方式与Git合作:

  1. git checkout -b feature123
  2. 微小编辑,提交,重复
  3. git checkout master
  4. git merge --squash feature123
  5. 使用git log --oneline的输出填充提交消息,如下所示:
  6. 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会将这些提交SHAs链接到各个提交的链接。但是,它仅对某些提交执行此操作,而其余提交不会成为链接。

    enter image description here

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

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

    也许是一些神奇的咒语?

1 个答案:

答案 0 :(得分:4)

据我了解你的意图,你的观点是根据需要提供一个简单的历史记录。

如果你做了一个被压缩的合并,那么(除非你添加一些显式引用)没有直接的方法来访问原始提交,git将(最终)清理所有那些无法访问的提交。

因此,您需要一种方法来存储原始分支的引用。最自然的地方就是合并提交本身,它完全是在非撤销合并中产生的。

因此,我的建议是定期合并并在显示您的历史记录时过滤重要提交,例如gitk --first-parent。这只会显示主分支上的提交并省略任何侧分支。 (即在第一种方法中撤销合并时你会摆脱的那种。)