If set, the second column of the rebase todo contains named revisions (obtained with git name-rev) instead of short SHA1s. --- Documentation/git-rebase.txt | 11 +++++++++++ git-rebase--interactive.sh | 11 ++++++++--- git-rebase.sh | 10 ++++++++++ t/t3404-rebase-interactive.sh | 11 +++++++++++ 4 files changed, 40 insertions(+), 3 deletions(-) diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt index 504945c..e7ecd2c 100644 --- a/Documentation/git-rebase.txt +++ b/Documentation/git-rebase.txt @@ -365,6 +365,17 @@ If the '--autosquash' option is enabled by default using the configuration variable `rebase.autosquash`, this option can be used to override and disable this setting. +--name-rev:: +--no-name-rev:: + Instead of showing short SHA1 hashes in the todo list, show + human-readable revisions obtained with linkgit:git-name-rev[1]. ++ +This option is only valid when the '--interactive' option is used. ++ +If the '--name-rev' option is enabled by default using the +configuration variable `rebase.interactivenamerev`, this option can be +used to override and disable this setting. + --no-ff:: With --interactive, cherry-pick all rebased commits instead of fast-forwarding over the unchanged ones. This ensures that the diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh index 8dcb8b0..5583dcb 100644 --- a/git-rebase--interactive.sh +++ b/git-rebase--interactive.sh @@ -780,10 +780,15 @@ git rev-list $merges_option --pretty=oneline --no-abbrev-commit \ sed -n "s/^>//p" | while read -r sha1 rest do - shortsha1=$(echo $sha1 | cut -c1-7) + if test t = "$name_rev" + then + rev="$(git name-rev $sha1 | cut -d\ -f2)" + else + rev=$(echo $sha1 | cut -c1-7) + fi if test t != "$preserve_merges" then - printf '%s\n' "pick $shortsha1 $rest" >> "$todo" + printf '%s\n' "pick $rev $rest" >> "$todo" else if test -z "$rebase_root" then @@ -801,7 +806,7 @@ do if test f = "$preserve" then touch "$rewritten"/$sha1 - printf '%s\n' "pick $shortsha1 $rest" >> "$todo" + printf '%s\n' "pick $rev $rest" >> "$todo" fi fi done diff --git a/git-rebase.sh b/git-rebase.sh index 69c1374..9330be3 100755 --- a/git-rebase.sh +++ b/git-rebase.sh @@ -43,6 +43,8 @@ s,strategy=! use the given merge strategy no-ff! cherry-pick all commits, even if unchanged m,merge! use merging strategies to rebase i,interactive! let the user edit the list of commits to rebase +name-rev show revisions by name in the list of commits +no-name-rev show revisions by short SHA1 in the list (default) f,force-rebase! force rebase even if branch is up to date X,strategy-option=! pass the argument through to the merge strategy stat! display a diffstat of what changed upstream @@ -98,6 +100,8 @@ action= preserve_merges= autosquash= test "$(git config --bool rebase.autosquash)" = "true" && autosquash=t +name_rev= +test "$(git config --bool rebase.interactivenamerev)" = "true" && name_rev=t read_basic_state () { head_name=$(cat "$state_dir"/head-name) && @@ -287,6 +291,12 @@ do -f|--no-ff) force_rebase=t ;; + --name-rev) + name_rev=t + ;; + --no-name-rev) + name_rev= + ;; --rerere-autoupdate|--no-rerere-autoupdate) allow_rerere_autoupdate="$1" ;; diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh index b981572..299ce40 100755 --- a/t/t3404-rebase-interactive.sh +++ b/t/t3404-rebase-interactive.sh @@ -163,6 +163,17 @@ test_expect_success 'exchange two commits' ' test G = $(git cat-file commit HEAD | sed -ne \$p) ' +cat > expect-rebase-todo <<EOF +pick branch1~1 H +pick branch1 G +EOF + +test_expect_success 'Symbolic revisions in --name-rev' ' + exec > debug.log 2>&1 && + FAKE_LINES="exec_cp_.git/rebase-merge/git-rebase-todo_rebase-todo 1 2" git rebase -i --name-rev HEAD~2 && + test_cmp expect-rebase-todo rebase-todo +' + cat > expect << EOF diff --git a/file1 b/file1 index f70f10e..fd79235 100644 -- 1.7.7.3 -- 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