【发布时间】:2015-04-21 21:18:48
【问题描述】:
我希望 git 在我使用 git merge 时始终进行合并提交 (--no-ff),但保留 git pull 的默认行为 (--ff)。这可能(使用配置)吗?
【问题讨论】:
标签: git git-merge fast-forward
我希望 git 在我使用 git merge 时始终进行合并提交 (--no-ff),但保留 git pull 的默认行为 (--ff)。这可能(使用配置)吗?
【问题讨论】:
标签: git git-merge fast-forward
可能有帮助的两个配置是:
merge.ff
(来自git merge man page):当设置为false 时,此变量告诉Git 在这种情况下创建一个额外的合并提交(相当于从命令行给出--no-ff 选项)。
pull.ff
将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 优先。
git pull --ff 的“裸”git pull 来解决此问题。但请不要称它为git puff。
merge.ff 优先,但我认为实际发生的是true 不是一个有效值(手册页没有' t 提及 true 作为可能的值)。无效值会导致选项变为未设置,从而导致回退到当前的merge.ff 行为。 merge.ff 似乎没有覆盖pull.ff,因为如果将后者设置为only,它就会生效。我实际上有点恼火true 不等于通过--ff。
这是我暂定的工作流程(请注意,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 是一个公认的值。
【讨论】: