Browse Source

git-merge: add support for --commit and --no-squash

These options can be used to override --no-commit and --squash, which is
needed since --no-commit and --squash now can be specified as default merge
options in $GIT_DIR/config.

The change also introduces slightly different behavior for --no-commit:
when specified, it explicitly overrides --squash. Earlier,
'git merge --squash --no-commit' would result in a squashed merge (i.e. no
$GIT_DIR/MERGE_HEAD was created) but with this patch the command will
behave as if --squash hadn't been specified.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Lars Hjemli 18 years ago committed by Junio C Hamano
parent
commit
d08af0ad74
  1. 8
      Documentation/merge-options.txt
  2. 8
      git-merge.sh
  3. 22
      t/t7600-merge.sh

8
Documentation/merge-options.txt

@ -10,6 +10,10 @@
not autocommit, to give the user a chance to inspect and not autocommit, to give the user a chance to inspect and
further tweak the merge result before committing. further tweak the merge result before committing.


--commit::
Perform the merge and commit the result. This option can
be used to override --no-commit.

--squash:: --squash::
Produce the working tree and index state as if a real Produce the working tree and index state as if a real
merge happened, but do not actually make a commit or merge happened, but do not actually make a commit or
@ -19,6 +23,10 @@
top of the current branch whose effect is the same as top of the current branch whose effect is the same as
merging another branch (or more in case of an octopus). merging another branch (or more in case of an octopus).


--no-squash::
Perform the merge and commit the result. This option can
be used to override --squash.

-s <strategy>, \--strategy=<strategy>:: -s <strategy>, \--strategy=<strategy>::
Use the given merge strategy; can be supplied more than Use the given merge strategy; can be supplied more than
once to specify them in the order they should be tried. once to specify them in the order they should be tried.

8
git-merge.sh

@ -3,7 +3,7 @@
# Copyright (c) 2005 Junio C Hamano # Copyright (c) 2005 Junio C Hamano
# #


USAGE='[-n] [--summary] [--no-commit] [--squash] [-s <strategy>] [-m=<merge-message>] <commit>+' USAGE='[-n] [--summary] [--[no-]commit] [--[no-]squash] [-s <strategy>] [-m=<merge-message>] <commit>+'


SUBDIRECTORY_OK=Yes SUBDIRECTORY_OK=Yes
. git-sh-setup . git-sh-setup
@ -128,8 +128,12 @@ parse_option () {
show_diffstat=t ;; show_diffstat=t ;;
--sq|--squ|--squa|--squas|--squash) --sq|--squ|--squa|--squas|--squash)
squash=t no_commit=t ;; squash=t no_commit=t ;;
--no-sq|--no-squ|--no-squa|--no-squas|--no-squash)
squash= no_commit= ;;
--c|--co|--com|--comm|--commi|--commit)
squash= no_commit= ;;
--no-c|--no-co|--no-com|--no-comm|--no-commi|--no-commit) --no-c|--no-co|--no-com|--no-comm|--no-commi|--no-commit)
no_commit=t ;; squash= no_commit=t ;;
-s=*|--s=*|--st=*|--str=*|--stra=*|--strat=*|--strate=*|\ -s=*|--s=*|--st=*|--str=*|--stra=*|--strat=*|--strate=*|\
--strateg=*|--strategy=*|\ --strateg=*|--strategy=*|\
-s|--s|--st|--str|--stra|--strat|--strate|--strateg|--strategy) -s|--s|--st|--str|--stra|--strat|--strate|--strateg|--strategy)

22
t/t7600-merge.sh

@ -395,4 +395,26 @@ test_expect_success 'override config option --summary' '


test_debug 'gitk --all' test_debug 'gitk --all'


test_expect_success 'merge c1 with c2 (override --no-commit)' '
git reset --hard c1 &&
git config branch.master.mergeoptions "--no-commit" &&
test_tick &&
git merge --commit c2 &&
verify_merge file result.1-5 msg.1-5 &&
verify_parents $c1 $c2
'

test_debug 'gitk --all'

test_expect_success 'merge c1 with c2 (override --squash)' '
git reset --hard c1 &&
git config branch.master.mergeoptions "--squash" &&
test_tick &&
git merge --no-squash c2 &&
verify_merge file result.1-5 msg.1-5 &&
verify_parents $c1 $c2
'

test_debug 'gitk --all'

test_done test_done

Loading…
Cancel
Save