我可以在git中默认关闭快进吗?

问题描述 投票:0回答:5

我真的想不出什么时候我会使用

git merge
而不是
git rebase
并且 not 希望出现提交。有什么方法可以配置 git 默认关闭快速转发吗?事实上,有一个
--ff
选项似乎意味着有一种方法,但我似乎在文档中找不到它。

git merge branch rebase fast-forward
5个回答
373
投票

线程中似乎仍有一个悬而未决的问题:如何全局执行此操作(即对于所有分支)?为了记录,我们可以使用以下内容:

git config --add merge.ff false

...使其适用于当前存储库中的所有分支。要使其适用于 所有存储库 中有人 运行它而不使用

--global
选项(本地设置覆盖全局)的所有分支,请运行以下命令:

git config --global --add merge.ff false

来自文档

merge.ff

默认情况下,当合并当前提交的后代提交时,git 不会创建额外的合并提交。相反,当前分支的尖端是快进的。当设置为 false 时,此变量告诉 git 在这种情况下创建额外的合并提交(相当于从命令行提供
--no-ff
选项)。当设置为 only 时,仅允许此类快进合并(相当于从命令行给出
--ff-only
选项)。


304
投票

是的,有

--no-ff
。您可以配置每个分支的合并选项,例如

git config branch.master.mergeoptions  "--no-ff"

将以下内容添加到您的

$(REPO)/.git/config
文件中:

[branch "master"]
    mergeoptions = --no-ff

脚注:说到我的经验,我最终发现将快进切换为关闭对于 git 新手来说最有帮助 - 然而一旦对工作流程和概念的感觉开始深入人心,你肯定希望避免大量无意义的内容模糊你的日志图“合并远程..blarf”类型提交。

脚注 2,十年后:下面的其他答案提供了更现代的配置选项,但实际上,您可能确实希望在当今时代保留默认值(即尽可能快进),因为空合并提交真的只会让历史变得更加难以推理。


29
投票

阅读答案的线索,我最终使用了以下两个选项:

# Disallows non ff merges on pull. Overrides merge.ff when pulling
git config --global pull.ff only

# Even create extra merge commit when fast forward merge would be possible
git config --global merge.ff false

只是松散相关,我还发现此设置可以避免拉取过程中的麻烦:

# Set up pull to rebase instead of merge
git config --global pull.rebase true

0
投票

这些答案对我不起作用,直到我不仅在全局上应用配置:

git config --global pull.ff only
git config pull.ff only

在本地,我的 pull.ff 配置是

false
(而不是
only


0
投票
git config --replace-all pull.ff false

上面的命令帮助我从所有分支中删除快进合并

© www.soinside.com 2019 - 2024. All rights reserved.