为什么`git merge <branch> --squash`不提交?

Luk*_*uke 6 git merge branch commit squash

在做正常的合并,例如git merge <branch>git创建一个合并提交并更新HEAD到提交当前分支。

git merge <branch> --squash但是,在进行壁合并时,例如,不会进行提交,而是说(在干净的合并中):

Squash commit -- not updating HEAD
Automatic merge went well; stopped before committing as requested
Run Code Online (Sandbox Code Playgroud)

这背后的原理是什么?对我来说,这似乎是普通合并和壁球合并之间的意外差异。如果正常合并和壁球合并之间的唯一区别是壁球合并壁球提交,对我来说将更直观。

tor*_*rek 4

这种为什么问题确实必须发送给最初编写该命令的人;只有他们真正知道。

底层实现是惰性的:它经历与常规合并相同的代码路径,但跳过写入文件MERGE_HEAD,然后提前退出以避免经历将进行合并提交的代码。

如果使用该--no-commit选项,代码将经历几乎相同的路径。事实上,这个的控制变量是option_commit,并且设置--squash会清除option_commit,就像您使用 运行一样--no-commit

如果--squash 没有清除option_commit,现有路径似乎会抱怨自动合并失败。所以这可能只是懒惰。