【问题标题】:Turn off fast-forward merging for regular merge, but not for pull关闭快进合并以进行常规合并,但不用于拉取
【发布时间】:2015-04-21 21:18:48
【问题描述】:

我希望 git 在我使用 git merge 时始终进行合并提交 (--no-ff),但保留 git pull 的默认行为 (--ff)。这可能(使用配置)吗?

【问题讨论】:

    标签: git git-merge fast-forward


    【解决方案1】:

    可能有帮助的两个配置是:

    merge.ff
    

    (来自git merge man page):当设置为false 时,此变量告诉Git 在这种情况下创建一个额外的合并提交(相当于从命令行给出--no-ff 选项)。

    pull.ff
    

    (来自git config man page)

    将pull.ff 设置为true 将保留默认行为,即在合并作为当前提交的后代的提交时,Git 不会创建额外的合并提交。

    待测试:pull.ff 是否优先于merge.ff?

    git config pull.ff only
    git config merge.ff false
    

    正如Kelvin 的answer 所述并由git-pull.sh 确认,“only”是要使用的值,而不是“true”。

    【讨论】:

    • 感谢您的提示,但看起来merge.ff 优先。
    • @oyvind 您可以通过使用别名而不是指向git pull --ff 的“裸”git pull 来解决此问题。但请不要称它为git puff。
    • 它可能出现好像merge.ff 优先,但我认为实际发生的是true 不是一个有效值(手册页没有' t 提及 true 作为可能的值)。无效值会导致选项变为未设置,从而导致回退到当前的merge.ff 行为。 merge.ff 似乎没有覆盖pull.ff,因为如果将后者设置为only,它就会生效。我实际上有点恼火true 不等于通过--ff。
    【解决方案2】:

    这是我暂定的工作流程(请注意,pull.ff 配置选项仅适用于 git 2.x。)。

    使用这个配置:

    • 将merge.ff 设置为false。这会将merge 行为默认为--no-ff。
    • 将pull.ff 设置为only。这会将pull 行为默认为--ff-only。

    这意味着如果您尝试 pull 一个本地在远程之后和之前的分支,pull 将失败。在这种情况下,请发送rebase,这样您就不会再落后了。

    注意:

    我尝试将 pull.ff 设置为 true 但 git 似乎将其视为完全未设置该选项。请注意,手册页没有提到 true 是一个公认的值。

    【讨论】:

    • 很好看。 +1。我已经相应地修改了自己的答案。
    猜你喜欢
    • 2015-07-22
    • 2018-07-05
    • 2011-12-05
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    相关资源
    最近更新 更多