Skip to content

Commit

Permalink
Merge branch 'vv/merge-squash-with-explicit-commit' into maint
Browse files Browse the repository at this point in the history
"git merge --squash" is designed to update the working tree and the
index without creating the commit, and this cannot be countermanded
by adding the "--commit" option; the command now refuses to work
when both options are given.

* vv/merge-squash-with-explicit-commit:
  merge: refuse --commit with --squash
  • Loading branch information
gitster committed Jul 25, 2019
2 parents abbd504 + 1d14d0c commit 33f2790
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 1 deletion.
2 changes: 2 additions & 0 deletions Documentation/merge-options.txt
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,8 @@ merge.
+
With --no-squash perform the merge and commit the result. This
option can be used to override --squash.
+
With --squash, --commit is not allowed, and will fail.

-s <strategy>::
--strategy=<strategy>::
Expand Down
12 changes: 11 additions & 1 deletion builtin/merge.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ static const char * const builtin_merge_usage[] = {
};

static int show_diffstat = 1, shortlog_len = -1, squash;
static int option_commit = 1;
static int option_commit = -1;
static int option_edit = -1;
static int allow_trivial = 1, have_message, verify_signatures;
static int overwrite_ignore = 1;
Expand Down Expand Up @@ -1339,9 +1339,19 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
if (squash) {
if (fast_forward == FF_NO)
die(_("You cannot combine --squash with --no-ff."));
if (option_commit > 0)
die(_("You cannot combine --squash with --commit."));
/*
* squash can now silently disable option_commit - this is not
* a problem as it is only overriding the default, not a user
* supplied option.
*/
option_commit = 0;
}

if (option_commit < 0)
option_commit = 1;

if (!argc) {
if (default_to_upstream)
argc = setup_with_upstream(&argv);
Expand Down
6 changes: 6 additions & 0 deletions t/t7600-merge.sh
Original file line number Diff line number Diff line change
Expand Up @@ -570,6 +570,12 @@ test_expect_success 'combining --squash and --no-ff is refused' '
test_must_fail git merge --no-ff --squash c1
'

test_expect_success 'combining --squash and --commit is refused' '
git reset --hard c0 &&
test_must_fail git merge --squash --commit c1 &&
test_must_fail git merge --commit --squash c1
'

test_expect_success 'option --ff-only overwrites --no-ff' '
git merge --no-ff --ff-only c1 &&
test_must_fail git merge --no-ff --ff-only c2
Expand Down

0 comments on commit 33f2790

Please sign in to comment.