Hi, On Mon, 15 Dec 2008, Johannes Sixt wrote: > When a merge that has a conflict was rebased, then rebase stopped to let > the user resolve the conflicts. However, thereafter --continue failed > because the author-script was not saved. (This is rebase -i's way to > preserve a commit's authorship.) This fixes it by doing taking the same > failure route after a merge that is also taken after a normal cherry-pick. > > Signed-off-by: Johannes Sixt <j6t@xxxxxxxx> > --- > This is an attempt at fixing the failure. I don't know whether it is > problematic to leave a "patch" behind if there was actually a merge. I'd suggest leaving behind a --cc patch, so that nobody is tempted to "fix" the patch until it applies. > diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh > index 1172e47..89c39eb 100755 > --- a/git-rebase--interactive.sh > +++ b/git-rebase--interactive.sh > @@ -253,15 +253,14 @@ pick_one_preserving_merges () { > if ! GIT_AUTHOR_NAME="$GIT_AUTHOR_NAME" \ > GIT_AUTHOR_EMAIL="$GIT_AUTHOR_EMAIL" \ > GIT_AUTHOR_DATE="$GIT_AUTHOR_DATE" \ > output git merge $STRATEGY -m "$msg" \ > $new_parents > then > - git rerere Why? I found rerere pretty helpful when rebasing merges. Ah, it is done by die_with_patch() already. You might want to prevent headscratching and hunting around for a few minutes, by simply mentioning that fact in the commit message. I'll leave the commit message fixing to you, but the --cc patch probably looks something like this -- feel free to squash in: --- git-rebase--interactive.sh | 18 +++++++++++++++--- 1 files changed, 15 insertions(+), 3 deletions(-) diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh index 89c39eb..b20c101 100755 --- a/git-rebase--interactive.sh +++ b/git-rebase--interactive.sh @@ -115,9 +115,21 @@ mark_action_done () { } 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 + *' '*' '*' '*) + echo "Octopus merge" + ;; + *' '*' '*) + git diff --cc $sha1_and_parents + ;; + *' '*) + git diff-tree -R -p $sha1_and_parents + ;; + *) + 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 || -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html