我一直在来回走动,无法确定哪种工作流程更好。我是否更愿意压缩合并为主的分支。或者我应该合并它们。
我赞成merge -squash并一直使用它。
合并的优点--squash:
有什么理由我不应该使用merge --squash而是使用普通的旧合并吗?
答案 0 :(得分:3)
当您想要保留所有间歇性提交时,例如分支尝试可能无效的事情时,快进合并非常有用。抛出临时分支比重置工作分支更容易。当实验工作时,最好将提交快速转发到工作分支上,保留它,就像实验一直保留在工作分支上一样。
我没有理由不将工作提交压缩到一个全面的提交中,并带有涵盖所有更改的消息。正如您所指出的那样,这使历史保持清洁并且更容易使用。从我所看到的,它是保持树清洁的首选方法。
git merge --squash
使用一个父级进行提交,因此它不会显示与要合并的父级的连接。
-A---------C <-- `git merge --squash`
\
*--*--B
另一种选择是使用git merge --no-ff
(无快进)强制合并提交。这个提交将有父母双方。如果需要,优点是保持树清洁,同时仍具有详细的提交历史记录。
-A---------C <-- `git merge --no-ff`
\ /
*--*--B
两个C
提交都是相同的,如果要保留B
,请选择较晚的。{/ p>
答案 1 :(得分:1)
取决于。
压扁失去信息,是否压缩取决于该信息是否重要。对于那些未来六六个月或六年的人来说,重要的是要弄清楚为什么一行代码是这样的。这取决于分支中的内容,更改的数量,更改的大小以及日志消息的好坏。
简单的经验法则?考虑壁球的结果并问自己“如果我在主人身上编码,我会承诺吗?”如果答案是肯定的,那么差异和日志一起将允许未来的人弄清楚为什么一行代码发生了变化,然后压缩合并。
如果答案是否定的,那么这不是一个可接受的掌握承诺,有太多的变化或太多的交织变化,那么就不要压扁它。合并它,也许是在考虑分支中的任何提交是否可以被压缩之后。
至于压制“更清洁”和“更容易一分为二”......我觉得这只是表面上的真实情况。如果你拿出书架上所有书籍的页面并将它们缝成一个“清洁”的大盖子,你现在只需要担心一本书。如果他们是一堆小说,每个小说都独立,那么它没有帮助。如果他们是年度会议报告,最好将它们捆绑在一起。
从某种意义上说,你不太可能会有一个破坏构建的提交,但是如果你的分词出现在一个巨大的变化之中,那么你仍然需要解决大量的可能性可能会导致问题,这使得平分线的工作变得更加困难。
使用相同的标准决定是否按照用于提交掌握的方式进行压缩合并,然后你就可以了。