Skip to content

Commit

Permalink
Merge branch 'bg/rebase-reword'
Browse files Browse the repository at this point in the history
* bg/rebase-reword:
  rebase -i: fix reword when using a terminal editor
  Teach 'rebase -i' the command "reword"
  • Loading branch information
Junio C Hamano committed Oct 19, 2009
2 parents 7f98ebc + 7725cb5 commit e79999b
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 6 deletions.
9 changes: 6 additions & 3 deletions Documentation/git-rebase.txt
Original file line number Diff line number Diff line change
Expand Up @@ -368,14 +368,17 @@ By replacing the command "pick" with the command "edit", you can tell
the files and/or the commit message, amend the commit, and continue
rebasing.

If you just want to edit the commit message for a commit, replace the
command "pick" with the command "reword".

If you want to fold two or more commits into one, replace the command
"pick" with "squash" for the second and subsequent commit. If the
commits had different authors, it will attribute the squashed commit to
the author of the first commit.

In both cases, or when a "pick" does not succeed (because of merge
errors), the loop will stop to let you fix things, and you can continue
the loop with `git rebase --continue`.
'git-rebase' will stop when "pick" has been replaced with "edit" or
when a command fails due to merge errors. When you are done editing
and/or resolving conflicts you can continue with `git rebase --continue`.

For example, if you want to reorder the last 5 commits, such that what
was HEAD~4 becomes the new HEAD. To achieve that, you would call
Expand Down
9 changes: 9 additions & 0 deletions git-rebase--interactive.sh
Original file line number Diff line number Diff line change
Expand Up @@ -340,6 +340,14 @@ do_next () {
pick_one $sha1 ||
die_with_patch $sha1 "Could not apply $sha1... $rest"
;;
reword|r)
comment_for_reflog reword

mark_action_done
pick_one $sha1 ||
die_with_patch $sha1 "Could not apply $sha1... $rest"
git commit --amend
;;
edit|e)
comment_for_reflog edit

Expand Down Expand Up @@ -752,6 +760,7 @@ first and then run 'git rebase --continue' again."
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
#
Expand Down
6 changes: 3 additions & 3 deletions t/lib-rebase.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
#
# "[<lineno1>] [<lineno2>]..."
#
# If a line number is prefixed with "squash" or "edit", the respective line's
# command will be replaced with the specified one.
# If a line number is prefixed with "squash", "edit", or "reword", the
# respective line's command will be replaced with the specified one.

set_fake_editor () {
echo "#!$SHELL_PATH" >fake-editor.sh
Expand All @@ -32,7 +32,7 @@ cat "$1".tmp
action=pick
for line in $FAKE_LINES; do
case $line in
squash|edit)
squash|edit|reword)
action="$line";;
*)
echo sed -n "${line}s/^pick/$action/p"
Expand Down
14 changes: 14 additions & 0 deletions t/t3404-rebase-interactive.sh
Original file line number Diff line number Diff line change
Expand Up @@ -470,4 +470,18 @@ test_expect_success 'avoid unnecessary reset' '
test 123456789 = $MTIME
'

test_expect_success 'reword' '
git checkout -b reword-branch master &&
FAKE_LINES="1 2 3 reword 4" FAKE_COMMIT_MESSAGE="E changed" git rebase -i A &&
git show HEAD | grep "E changed" &&
test $(git rev-parse master) != $(git rev-parse HEAD) &&
test $(git rev-parse master^) = $(git rev-parse HEAD^) &&
FAKE_LINES="1 2 reword 3 4" FAKE_COMMIT_MESSAGE="D changed" git rebase -i A &&
git show HEAD^ | grep "D changed" &&
FAKE_LINES="reword 1 2 3 4" FAKE_COMMIT_MESSAGE="B changed" git rebase -i A &&
git show HEAD~3 | grep "B changed" &&
FAKE_LINES="1 reword 2 3 4" FAKE_COMMIT_MESSAGE="C changed" git rebase -i A &&
git show HEAD~2 | grep "C changed"
'

test_done

0 comments on commit e79999b

Please sign in to comment.