Junio C Hamano  committed 123ee3c

Add --no-commit to git-merge/git-pull.

With --no-commit flag, git-pull will perform the merge but pretends as
if the merge needed a hand resolve even if automerge cleanly resolves,
to give the user a chance to add further changes and edit the commit

Signed-off-by: Junio C Hamano <>

  • Participants
  • Parent commits a3114b3

Comments (0)

Files changed (2)


 usage () {
-    die "git-merge [-n] [-s <strategy>]... <merge-message> <head> <remote>+"
+    die "git-merge [-n] [--no-commit] [-s <strategy>]... <merge-message> <head> <remote>+"
 # all_strategies='resolve recursive stupid octopus'
 		no_summary=t ;;
+	--no-c|--no-co|--no-com|--no-comm|--no-commi|--no-commit)
+		no_commit=t ;;
 common=$(git-show-branch --merge-base $head "$@")
 echo "$head" >"$GIT_DIR/ORIG_HEAD"
-case "$#,$common" in
+case "$#,$common,$no_commit" in
 	# No common ancestors found. We need a real merge.
 	# If head can reach all the merge then we are up to date.
 	# but first the most common case of merging one remote
 	echo "Already up-to-date."
 	exit 0
 	# Again the most common case of merging one remote.
 	echo "Updating from $head to $1."
 	git-update-index --refresh 2>/dev/null
 	exit 0
 	# We are not doing octopus and not fast forward.  Need a
 	# real merge.
 	# We are not doing octopus, not fast forward, and have only
 	# one common.  See if it is really trivial.
 	echo "Trying really trivial in-index merge..."
     # Remember which strategy left the state in the working tree
-    git-merge-$strategy $common -- "$head_arg" "$@" || {
+    git-merge-$strategy $common -- "$head_arg" "$@"
+    exit=$?
+    if test "$no_commit" = t && test "$exit" = 0
+    then
+	exit=1 ;# pretend it left conflicts.
+    fi
+    test "$exit" = 0 || {
 	# The backend exits with 1 when conflicts are left to be resolved,
 	# with 2 when it does not handle the given merge at all.
-	exit=$?
 	if test "$exit" -eq 1
 echo $merge_msg >"$GIT_DIR/MERGE_MSG"
-die "Automatic merge failed; fix up by hand"
+die "Automatic merge failed/prevented; fix up by hand"
     die "git pull [-n] [-s strategy]... <repo> <head>..."
-strategy_args= no_summary=
+strategy_args= no_summary= no_commit=
 while case "$#,$1" in 0) break ;; *,-*) ;; *) break ;; esac
 	case "$1" in
 		no_summary=-n ;;
+	--no-c|--no-co|--no-com|--no-comm|--no-commi|--no-commit)
+		no_commit=--no-commit ;;
 merge_name=$(git-fmt-merge-msg <"$GIT_DIR/FETCH_HEAD")
-git-merge $no_summary $strategy_args "$merge_name" HEAD $merge_head
+git-merge $no_summary $no_commit $strategy_args "$merge_name" HEAD $merge_head