有一段时间,我以这种不同寻常的方式与Git合作:
git checkout -b feature123
git checkout master
git merge --squash feature123
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会将这些提交SHAs链接到各个提交的链接。但是,它仅对某些提交执行此操作,而其余提交不会成为链接。
这显然是在Git工作的一种不寻常的方式。这些工具不太可能在它周围改进,而其他程序员在看到它时可能会感到困惑。
通常,在合并Git功能分支后,您可以删除它 - 没有太多理由保留它。但在这种情况下,如果我删除分支,单个提交将消失,并且您无法在GitHub中单击它们。所以那些旧的分支混乱了,即使它们没用。 我该怎样摆脱它们?
也许是一些神奇的咒语?
答案 0 :(得分:4)
据我了解你的意图,你的观点是根据需要提供一个简单的历史记录。
如果你做了一个被压缩的合并,那么(除非你添加一些显式引用)没有直接的方法来访问原始提交,git将(最终)清理所有那些无法访问的提交。
因此,您需要一种方法来存储原始分支的引用。最自然的地方就是合并提交本身,它完全是在非撤销合并中产生的。
因此,我的建议是定期合并并在显示您的历史记录时过滤重要提交,例如gitk --first-parent
。这只会显示主分支上的提交并省略任何侧分支。 (即在第一种方法中撤销合并时你会摆脱的那种。)