为什么默认情况下合并后需要进行git提交?

24

我对此行为很好奇,也许只是因为我大多数时候使用的是SVN和Bazaar。(我正在学习git与卓越的github进行接口操作。)

这个行为对我来说似乎是违反直觉的,好像将

git merge [branch] --no-commit

设为默认值会更好,以鼓励人们在提交之前确认合并是否按照他们的意愿进行。


2
顺便提一句,如果出了问题,git merge会导致冲突。此外,如果由于特殊原因您想查看合并引入的未提交更改,则可在成功的“git merge”后立即执行“git reset HEAD^”,这将后退到一个提交,使所有上一次提交所做的更改(这将是合并提交)未提交。 - Ruslan Kabalin
1个回答

28
Linus Torvalds 在创建 Git 时设定的目标是让所有可以自动解决的合并都变得...快速。详见他在 2007 Google Tech Talk: Linus Torvalds on Git (transcript) 中的讲话。
即每秒钟可以合并数百个文件。
所以默认情况下"--no-commit"会基本上破坏这个目的。
引用自Linus's talk (video)中的摘录:
使用 "--no-commit",执行合并但假装合并失败并且不进行自动提交,以便让用户有机会检查和进一步调整合并结果,然后再提交。 唯一重要的是合并速度有多快。在Git中,您可以合并...我每天合并22,000个文件好几次,并且如果合并需要超过5秒,我会感到不满意,而那5秒的时间只是下载所有差异,其实不是差异,而是两个树之间的增量,合并本身只需要不到半秒钟。
而且我不必考虑它。
[...]这种性能实际上改变了您的工作方式。

啊,好的,基本上假设是如果你正在合并,那么这就是你想做的,而且你希望尽快完成它吗? - Will
2
@Will:是的,但不要忘记另一个工作流程:在合并之前对您的工作进行变基(这将导致快进式合并:https://dev59.com/BXRA5IYBdhLWcg3w2xwI#804178) - VonC
你参考答案中提到的演讲视频链接为:http://www.youtube.com/watch?v=4XpnKHJAok8&feature=player_detailpage#t=3118s - Will

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接