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>
This commit is contained in:
Lars Hjemli 2007-09-24 00:51:44 +02:00 committed by Junio C Hamano
parent aec7b362ad
commit d08af0ad74
3 changed files with 36 additions and 2 deletions

View File

@ -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.

View File

@ -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)

View File

@ -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