Add merge.ff flag to support turning off fast-forward merges by default. This flag is overridden if any branch.x.mergeoptions turn it back on. Documentation/merge-config.txt | 6 ++++++ builtin/merge.c | 3 +++ 2 files changed, 9 insertions(+), 0 deletions(-) Signed-off-by: Junio C Hamano <gitster@xxxxxxxxx> Reported-by: Michael Grubb <devel@xxxxxxxxxxxxx> --- Documentation/merge-config.txt | 6 ++++++ builtin/merge.c | 3 +++ t/t7600-merge.sh | 23 +++++++++++++++++++++++ 3 files changed, 32 insertions(+), 0 deletions(-) diff --git a/Documentation/merge-config.txt b/Documentation/merge-config.txt index 8920258..2aa4408 100644 --- a/Documentation/merge-config.txt +++ b/Documentation/merge-config.txt @@ -16,6 +16,12 @@ merge.defaultToUpstream:: to their corresponding remote tracking branches, and the tips of these tracking branches are merged. +merge.ff:: + Do not generate a merge commit if the merge resolved as a + fast-forward; only update the branch pointer instead. Setting + this to `false` would be equivalent to giving `--no-ff` from + the command line. + merge.log:: In addition to branch names, populate the log message with at most the specified number of one-line descriptions from the diff --git a/builtin/merge.c b/builtin/merge.c index d171c63..5194f04 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -541,6 +541,9 @@ static int git_merge_config(const char *k, const char *v, void *cb) if (is_bool && shortlog_len) shortlog_len = DEFAULT_MERGE_LOG_LEN; return 0; + } else if (!strcmp(k, "merge.ff")) { + allow_fast_forward = git_config_bool(k, v); + return 0; } else if (!strcmp(k, "merge.defaulttoupstream")) { default_to_upstream = git_config_bool(k, v); return 0; diff --git a/t/t7600-merge.sh b/t/t7600-merge.sh index e84e822..21c25d4 100755 --- a/t/t7600-merge.sh +++ b/t/t7600-merge.sh @@ -415,6 +415,29 @@ test_expect_success 'merge c0 with c1 (no-ff)' ' test_debug 'git log --graph --decorate --oneline --all' +test_expect_success 'merge c0 with c1 (merge.ff=false)' ' + git reset --hard c0 && + git config merge.ff false && + test_tick && + git merge c1 && + git config --remove-section merge && + verify_merge file result.1 && + verify_parents $c0 $c1 +' +test_debug 'git log --graph --decorate --oneline --all' + +test_expect_success 'combine branch.master.mergeoptions with merge.ff' ' + git reset --hard c0 && + git config branch.master.mergeoptions --ff + git config merge.ff false + test_tick && + git merge c1 && + git config --remove-section "branch.master" && + git config --remove-section "merge" && + verify_merge file result.1 && + verify_parents "$c0" +' + test_expect_success 'combining --squash and --no-ff is refused' ' test_must_fail git merge --squash --no-ff c1 && test_must_fail git merge --no-ff --squash c1 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html