Commits

Johannes Schindelin  committed 4fb1a19

rebase -i -p: leave a --cc patch when a merge could not be redone

The result is easier to review this way, and the merge resolution has to be
done inside the work tree, not by adjusting "the patch" anyway.

  • Participants
  • Parent commits f5b49ea

Comments (0)

Files changed (2)

File git-rebase--interactive.sh

 }
 
 make_patch () {
-	parent_sha1=$(git rev-parse --verify "$1"^) ||
-		die "Cannot get patch for $1^"
-	git diff-tree -p "$parent_sha1".."$1" > "$DOTEST"/patch
+	sha1_and_parents="$(git rev-list --parents -1 "$1")"
+	case "$sha1_and_parents" in
+	?*' '?*' '?*)
+		git diff --cc $sha1_and_parents
+		;;
+	?*' '?*)
+		git diff-tree -p "$1^!"
+		;;
+	*)
+		echo "Root commit"
+		;;
+	esac > "$DOTEST"/patch
 	test -f "$DOTEST"/message ||
 		git cat-file commit "$1" | sed "1,/^$/d" > "$DOTEST"/message
 	test -f "$DOTEST"/author-script ||

File t/t3409-rebase-preserve-merges.sh

 	test 2 = $(git ls-files B | wc -l) &&
 	echo Resolved again > B &&
 	test_must_fail git rebase --continue &&
+	grep "^@@@ " .git/rebase-merge/patch &&
 	git add B &&
 	git rebase --continue &&
 	test 1 = $(git rev-list --all --pretty=oneline | grep "Modify A" | wc -l) &&