From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: git@vger.kernel.org
Cc: "Matthieu Moy" <Matthieu.Moy@grenoble-inp.fr>,
"Jeff King" <peff@peff.net>,
philipoakley@iee.org, "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH 3/3] rebase: new convenient option to edit a single commit
Date: Sun, 2 Mar 2014 09:53:14 +0700 [thread overview]
Message-ID: <1393728794-29566-4-git-send-email-pclouds@gmail.com> (raw)
In-Reply-To: <1393728794-29566-1-git-send-email-pclouds@gmail.com>
"git rebase -e XYZ" is basically the same as
EDITOR="sed -i '1s/pick XYZ/edit XYZ/' $@" \
git rebase -i XYZ^
In English, it prepares the todo list for you to edit only commit XYZ
to save your time. The time saving is only significant when you edit a
lot of commits separately.
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
Documentation/git-rebase.txt | 4 ++++
git-rebase--interactive.sh | 17 ++++++++++++++---
git-rebase.sh | 10 ++++++++++
3 files changed, 28 insertions(+), 3 deletions(-)
diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt
index 52c3561..b8c263d 100644
--- a/Documentation/git-rebase.txt
+++ b/Documentation/git-rebase.txt
@@ -359,6 +359,10 @@ unless the `--fork-point` option is specified.
user edit that list before rebasing. This mode can also be used to
split commits (see SPLITTING COMMITS below).
+-e::
+--edit-one::
+ Prepare the todo list to edit only the commit at <upstream>
+
-p::
--preserve-merges::
Instead of ignoring merges, try to recreate them.
diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index a1adae8..4762d57 100644
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -1040,9 +1040,20 @@ fi
has_action "$todo" ||
die_abort "Nothing to do"
-cp "$todo" "$todo".backup
-git_sequence_editor "$todo" ||
- die_abort "Could not execute editor"
+if test -n "$edit_one"
+then
+ edit_one="`git rev-parse --short $edit_one`"
+ sed "1s/pick $edit_one /edit $edit_one /" "$todo" > "$todo.new" ||
+ die_abort "failed to update todo list"
+ grep "^edit $edit_one " "$todo.new" >/dev/null ||
+ die_abort "expected to find 'edit $edit_one' line but did not"
+ mv "$todo.new" "$todo" ||
+ die_abort "failed to update todo list"
+else
+ cp "$todo" "$todo".backup
+ git_sequence_editor "$todo" ||
+ die_abort "Could not execute editor"
+fi
has_action "$todo" ||
die_abort "Nothing to do"
diff --git a/git-rebase.sh b/git-rebase.sh
index 33face1..b8b6aa9 100755
--- a/git-rebase.sh
+++ b/git-rebase.sh
@@ -32,6 +32,7 @@ verify allow pre-rebase hook to run
rerere-autoupdate allow rerere to update index with resolved conflicts
root! rebase all reachable commits up to the root(s)
autosquash move commits that begin with squash!/fixup! under -i
+e,edit-one! generate todo list to edit this commit
committer-date-is-author-date! passed to 'git am'
ignore-date! passed to 'git am'
whitespace=! passed to 'git apply'
@@ -339,6 +340,10 @@ do
-NUM=*)
NUM="${1#-NUM=}"
;;
+ --edit-one)
+ interactive_rebase=explicit
+ edit_one=t
+ ;;
--)
shift
break
@@ -463,6 +468,11 @@ then
;;
*) upstream_name="$1"
shift
+ if test -n "$edit_one"
+ then
+ edit_one="$upstream_name"
+ upstream_name="$upstream_name^"
+ fi
;;
esac
upstream=$(peel_committish "${upstream_name}") ||
--
1.9.0.40.gaa8c3ea
next prev parent reply other threads:[~2014-03-02 2:54 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-27 13:01 [PATCH/RFC] rebase: new convenient option to edit a single commit Nguyễn Thái Ngọc Duy
2014-02-27 13:52 ` Matthieu Moy
2014-02-28 6:58 ` Jeff King
2014-02-28 7:34 ` Duy Nguyen
2014-02-28 7:38 ` Jeff King
2014-02-28 17:14 ` Philip Oakley
2014-03-02 2:53 ` [PATCH 0/3] rebase's convenient options Nguyễn Thái Ngọc Duy
2014-03-02 2:53 ` [PATCH 1/3] rev-parse: support OPT_NUMBER_CALLBACK in --parseopt Nguyễn Thái Ngọc Duy
2014-03-04 18:28 ` Junio C Hamano
2014-03-02 2:53 ` [PATCH 2/3] rebase: accept -<number> as another way of saying HEAD~<number> Nguyễn Thái Ngọc Duy
2014-03-02 8:37 ` Eric Sunshine
2014-03-02 8:45 ` Duy Nguyen
2014-03-02 8:53 ` Eric Sunshine
2014-03-02 8:55 ` Eric Sunshine
2014-03-02 15:55 ` Matthieu Moy
2014-03-03 9:16 ` Michael Haggerty
2014-03-03 9:37 ` Matthieu Moy
2014-03-03 10:04 ` Duy Nguyen
2014-03-03 10:11 ` David Kastrup
2014-03-03 10:12 ` Matthieu Moy
2014-03-03 10:13 ` Jeff King
2014-03-03 21:48 ` Junio C Hamano
2014-03-03 22:39 ` Matthieu Moy
2014-03-03 21:44 ` Junio C Hamano
2014-03-02 2:53 ` Nguyễn Thái Ngọc Duy [this message]
2014-03-02 9:04 ` [PATCH 3/3] rebase: new convenient option to edit a single commit Eric Sunshine
2014-03-02 9:09 ` Eric Sunshine
2014-03-03 10:10 ` Michael Haggerty
2014-03-03 10:15 ` Duy Nguyen
2014-03-03 10:37 ` David Kastrup
2014-03-03 20:28 ` Eric Sunshine
2014-03-04 2:08 ` Duy Nguyen
2014-03-04 8:59 ` Michael Haggerty
2014-03-04 10:24 ` Duy Nguyen
2014-03-04 13:11 ` Michael Haggerty
2014-03-04 18:37 ` Junio C Hamano
2014-03-09 2:49 ` [PATCH/RFC] rebase: new convenient option to edit/reword/delete " Nguyễn Thái Ngọc Duy
2014-03-09 16:30 ` Matthieu Moy
2014-03-10 8:30 ` Michael Haggerty
2014-03-10 8:41 ` Matthieu Moy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1393728794-29566-4-git-send-email-pclouds@gmail.com \
--to=pclouds@gmail.com \
--cc=Matthieu.Moy@grenoble-inp.fr \
--cc=git@vger.kernel.org \
--cc=peff@peff.net \
--cc=philipoakley@iee.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.