为什么 -f 在 git 命令 git merge --no-ff <branch-name> 中被调用两次?

Why is -f being called twice in the git command git merge --no-ff <branch-name>?

在查找 git 参数的语法时涉及一个破折号与两个破折号。我遇到了这个 post 这解释了 single dashes allow you to specify multiple single letter parameters with one dash and double dashes are for multi-letter parameters.

所以在 git merge --no-ff <branch-name> 的情况下 -ff 调用了 -f 两次?如果是,为什么?

So in the case of git merge --no-ff <branch-name> is -ff calling -f twice?

不,不是。

--no-ff 是完整的长选项。长选项可能包含破折号,因为只有空格分隔命令行参数,而长选项始终是整个命令行参数(不像短选项,其中一个命令行参数可以包含多个选项,即 -bar 包含 b ar).

--ff 就意味着 fast forward.

从语义上讲:

  • a fast-forward merge 当前 feature 分支中的分支 other 是一个简单的合并,其中feature 的 SHA1 只是“撞”到 other(这并不总是可能的,只有当 otherfeature 的 child-commit-or-so 时)

  • a non-fast-forward merge of other in feature 是“真正的合并”,结果是在分支 feature 中创建一个新的合并提交,然后它有两个父提交。

参考

另请参阅在线 refman,其中指示存在三个相关的 CLI 标志:

https://git-scm.com/docs/git-merge#Documentation/git-merge.txt---ff

--ff
--no-ff
--ff-only

Specifies how a merge is handled when the merged-in history is already a descendant of the current history.