From: Fabian Ruch <bafain@gmail.com>
To: git@vger.kernel.org
Cc: Michael Haggerty <mhagger@alum.mit.edu>,
Thomas Rast <tr@thomasrast.ch>, Jeff King <peff@peff.net>
Subject: [PATCH v3 27/27] rebase -i: enable --signoff, --reset-author for pick, reword, edit
Date: Mon, 18 Aug 2014 23:23:10 +0200 [thread overview]
Message-ID: <3e91ba1f6f59b9667c329b224a4f54bf0af9ee3e.1408396036.git.bafain@gmail.com> (raw)
In-Reply-To: <cover.1408396036.git.bafain@gmail.com>
Lift the general unknown option blockade for the `pick`, `reword` and
`edit` commands. If `do_cmd` comes across one of the options
`--signoff` and `--reset-author` while parsing a to-do entry and the
scheduled command is either `pick` or `reword`, relay the option to
`do_pick`.
Remember to add Signed-off-by: and to reset the authorship even when
the rebase is interrupted for conflict resolution and `git rebase
--continue` creates the commit. Employ the same mechanism that is
used to remember amending an interim squash commit after conflict
resolution or a commit after editing. If a line option was specified,
create the files `signoff` and `resetauthor` respectively in the
state directory. While `signoff` is handled by simply specifying the
`--signoff` option when creating the commit, the `resetauthor` case
is somewhat more involved. The author script contains the author
information of the replayed commit. Renewing the authorship means
using the user environment for the authorship so that we need to skip
the author script if `resetauthor` exists and we are not amending. If
we are amending, `--reset-author` must be passed to git-commit
because otherwise the authorship of HEAD would be used.
`do_pick` options like `--gpg-sign` and `--file` are not yet
supported because `do_cmd` cannot handle option arguments and options
with spaces at the moment. `squash` and `fixup` still do not accept
user options as the interplay of `--reset-author` and the author
script is yet to be determined.
Document the new options by listing them in the to-do help and giving
a usage example in the "INTERACTIVE MODE" section of the git-rebase
man page.
Add tests.
Signed-off-by: Fabian Ruch <bafain@gmail.com>
---
Documentation/git-rebase.txt | 13 +++
git-rebase--interactive.sh | 38 +++++++-
t/t3427-rebase-line-options.sh | 192 ++++++++++++++++++++++++++++++++++++++++-
3 files changed, 240 insertions(+), 3 deletions(-)
diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt
index 2a93c64..10c0fd2 100644
--- a/Documentation/git-rebase.txt
+++ b/Documentation/git-rebase.txt
@@ -508,6 +508,19 @@ rebasing.
If you just want to edit the commit message for a commit, replace the
command "pick" with the command "reword".
+The commands "pick", "reword" and "edit" understand some well-known
+options. To add a Signed-off-by line at the end of the commit
+message, pass the `--signoff` option. The authorship can be renewed
+by specifying the `--reset-author` option. For instance, before you
+decide to publish a heavily edited commit you might want to reset the
+authorship and add your signature. You can do so on a per line basis:
+
+-------------------------------------------
+pick deadbee The oneline of this commit
+pick --reset-author --signoff fa1afe1 The oneline of the next commit
+...
+-------------------------------------------
+
If you want to fold two or more commits into one, replace the command
"pick" for the second and subsequent commits with "squash" or "fixup".
If the commits had different authors, the folded commit will be
diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index 51ee80c..0db5001 100644
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -72,9 +72,15 @@ last_head="$state_dir"/last_head
# file 'amend' is created. When "git rebase --continue" is executed,
# if there are any staged changes then they will be amended to the
# HEAD commit, but only provided the HEAD commit is still the commit
-# to be edited or the squash commit. When any other rebase command is
+# to be edited or the squash commit. Similarly, when a Signed-off-by:
+# should be added to a log message or the authorship should be
+# renewed, the files 'signoff' and 'resetauthor' are created
+# respectively, and "git rebase --continue" carries out the changes
+# after conflict resolution. When any other rebase command is
# processed, these files are deleted.
amend="$state_dir"/amend
+signoff="$state_dir"/signoff
+resetauthor="$state_dir"/resetauthor
# For the post-rewrite hook, we make a list of rewritten commits and
# their new sha1s. The rewritten-pending list keeps the sha1s of
@@ -149,6 +155,10 @@ Commands:
f, fixup = like "squash", but discard this commit's log message
x, exec = run command (the rest of the line) using shell
+Options:
+ [pick | reword | edit] --signoff = add a Signed-off-by line
+ [pick | reword | edit] --reset-author = renew authorship
+
These lines can be re-ordered; they are executed from top to bottom.
If you remove a line here THAT COMMIT WILL BE LOST.
@@ -528,10 +538,12 @@ do_pick () {
-s|--signoff)
rewrite=y
rewrite_signoff=y
+ >"$signoff"
;;
--reset-author)
rewrite=y
rewrite_reset_author=y
+ >"$resetauthor"
;;
--amend)
if test "$(git rev-parse HEAD)" = "$squash_onto" || ! git rev-parse -q --verify HEAD >/dev/null
@@ -630,6 +642,15 @@ do_replay () {
while test $# -gt 0 && test -z "$malformed"
do
case "$1" in
+ --signoff|--reset-author)
+ case "$command" in
+ pick|reword|edit)
+ ;;
+ *)
+ malformed="Unsupported '$command' option: $1"
+ ;;
+ esac
+ ;;
-*)
malformed="Unknown '$command' option: $1"
;;
@@ -739,7 +760,7 @@ do_replay () {
}
do_next () {
- rm -f "$msg" "$author_script" "$amend" || exit
+ rm -f "$msg" "$author_script" "$amend" "$signoff" "$resetauthor" || exit
git rev-parse --verify HEAD >"$last_head" || exit
read -r command args <"$todo"
@@ -1043,15 +1064,28 @@ In both case, once you're done, continue with:
die "\
You have uncommitted changes in your working tree. Please, commit them
first and then run 'git rebase --continue' again."
+ rewrite_reset_author=
+ rewrite_signoff=
+ test -f "$resetauthor" && rewrite_reset_author=y
+ test -f "$signoff" && rewrite_signoff=y
if test -f "$amend"
then
git commit --amend --no-verify -F "$msg" -e \
+ ${rewrite_signoff:+--signoff} \
+ ${rewrite_reset_author:+--reset-author} \
+ ${gpg_sign_opt:+"$gpg_sign_opt"} ||
+ die "Could not commit staged changes."
+ elif test -n "$rewrite_reset_author"
+ then
+ git commit --no-verify -F "$msg" -e \
+ ${rewrite_signoff:+--signoff} \
${gpg_sign_opt:+"$gpg_sign_opt"} ||
die "Could not commit staged changes."
else
test -r "$author_script" ||
die "Error trying to find the author identity to amend commit"
do_with_author $(cat "$author_script") git commit --no-verify -F "$msg" -e \
+ ${rewrite_signoff:+--signoff} \
${gpg_sign_opt:+"$gpg_sign_opt"} ||
die "Could not commit staged changes."
fi
diff --git a/t/t3427-rebase-line-options.sh b/t/t3427-rebase-line-options.sh
index 5881162..9c9501a 100755
--- a/t/t3427-rebase-line-options.sh
+++ b/t/t3427-rebase-line-options.sh
@@ -6,10 +6,32 @@ test_description='git rebase -i with line options'
. "$TEST_DIRECTORY"/lib-rebase.sh
+commit_message () {
+ git cat-file commit "$1" | sed '1,/^$/d'
+}
+
+commit_authorship () {
+ git cat-file commit "$1" | sed -n '/^$/q;/^author /p'
+}
+
+authorship () {
+ echo "author $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> $GIT_AUTHOR_DATE"
+}
+
+test_diff_file () {
+ if cmp "$1" "$2" >/dev/null
+ then
+ echo "'$1' and '$2' are the same"
+ return 1
+ fi
+}
+
test_expect_success 'Set up repository' '
test_commit Initial &&
test_commit Commit1 &&
- test_commit Commit2
+ test_commit Commit2 &&
+ git checkout -b branch Commit1 &&
+ test_commit Commit2_ Commit2.t
'
test_expect_success 'Unknown option' '
@@ -23,4 +45,172 @@ test_expect_success 'Unknown option' '
git rebase --continue
'
+test_msg_author () {
+ set_fake_editor &&
+ FAKE_LINES="1 $1 2" git rebase -i HEAD~2 &&
+ commit_message HEAD >actual.msg &&
+ commit_authorship HEAD >actual.author &&
+ test_cmp expected.msg actual.msg &&
+ test_cmp expected.author actual.author
+}
+
+test_msg_author_misspelled () {
+ set_cat_todo_editor &&
+ test_must_fail git rebase -i HEAD^ >todo &&
+ set_fake_editor &&
+ test_must_fail env FAKE_LINES="1 $1-misspelled 2" git rebase -i HEAD~2 &&
+ set_fixed_todo_editor "$(pwd)"/todo &&
+ FAKE_LINES="$1 1" git rebase --edit-todo &&
+ git rebase --continue &&
+ commit_message HEAD >actual.msg &&
+ commit_authorship HEAD >actual.author &&
+ test_cmp expected.msg actual.msg &&
+ test_cmp expected.author actual.author
+}
+
+test_msg_author_conflicted () {
+ set_fake_editor &&
+ test_must_fail env FAKE_LINES="$1 1" git rebase -i master &&
+ git checkout --theirs Commit2.t &&
+ git add Commit2.t &&
+ git rebase --continue &&
+ commit_message HEAD >actual.msg &&
+ commit_authorship HEAD >actual.author &&
+ test_cmp expected.msg actual.msg &&
+ test_cmp expected.author actual.author
+}
+
+test_expect_success 'Misspelled pick --signoff' '
+ git checkout -b misspelled-pick--signoff master &&
+ cat >expected.msg <<-EOF &&
+ $(commit_message HEAD)
+
+ Signed-off-by: C O Mitter <committer@example.com>
+ EOF
+ commit_authorship HEAD >expected.author &&
+ test_msg_author_misspelled pick_--signoff
+'
+
+test_expect_success 'Conflicted pick --signoff' '
+ git checkout -b conflicted-pick--signoff branch &&
+ cat >expected.msg <<-EOF &&
+ $(commit_message HEAD)
+
+ Signed-off-by: C O Mitter <committer@example.com>
+ EOF
+ commit_authorship HEAD >expected.author &&
+ test_msg_author_conflicted pick_--signoff
+'
+
+test_expect_success 'pick --signoff' '
+ git checkout -b pick--signoff master &&
+ cat >expected.msg <<-EOF &&
+ $(commit_message HEAD)
+
+ Signed-off-by: C O Mitter <committer@example.com>
+ EOF
+ commit_authorship HEAD >expected.author &&
+ test_msg_author pick_--signoff
+'
+
+test_expect_success 'reword --signoff' '
+ git checkout -b reword--signoff master &&
+ cat >expected.msg <<-EOF &&
+ $(commit_message HEAD)
+
+ Signed-off-by: C O Mitter <committer@example.com>
+ EOF
+ commit_authorship HEAD >expected.author &&
+ test_msg_author reword_--signoff
+'
+
+test_expect_success 'edit --signoff' '
+ git checkout -b edit--signoff master &&
+ cat >expected.msg <<-EOF &&
+ $(commit_message HEAD)
+
+ Signed-off-by: C O Mitter <committer@example.com>
+ EOF
+ commit_authorship HEAD >expected.author &&
+ set_fake_editor &&
+ FAKE_LINES="1 edit_--signoff 2" git rebase -i HEAD~2 &&
+ git rebase --continue &&
+ commit_message HEAD >actual.msg &&
+ commit_authorship HEAD >actual.author &&
+ test_cmp expected.msg actual.msg &&
+ test_cmp expected.author actual.author
+'
+
+test_expect_success 'Misspelled pick --reset-author' '
+ git checkout -b misspelled-pick--reset-author master &&
+ commit_message HEAD >expected.msg &&
+ test_tick &&
+ authorship >expected.author &&
+ commit_authorship HEAD >original.author &&
+ test_diff_file expected.author original.author &&
+ test_msg_author_misspelled pick_--reset-author
+'
+
+test_expect_success 'Conflicted pick --reset-author' '
+ git checkout -b conflicted-pick--reset-author branch &&
+ commit_message HEAD >expected.msg &&
+ test_tick &&
+ authorship >expected.author &&
+ commit_authorship HEAD >original.author &&
+ test_diff_file expected.author original.author &&
+ test_msg_author_conflicted pick_--reset-author
+'
+
+test_expect_success 'pick --reset-author' '
+ git checkout -b pick--reset-author master &&
+ commit_message HEAD >expected.msg &&
+ test_tick &&
+ authorship >expected.author &&
+ commit_authorship HEAD >original.author &&
+ test_diff_file expected.author original.author &&
+ test_msg_author pick_--reset-author
+'
+
+test_expect_success 'pick --reset-author --signoff' '
+ git checkout -b pick--reset-author--signoff master &&
+ cat >expected.msg <<-EOF &&
+ $(commit_message HEAD)
+
+ Signed-off-by: C O Mitter <committer@example.com>
+ EOF
+ test_tick &&
+ authorship >expected.author &&
+ commit_authorship HEAD >original.author &&
+ test_diff_file expected.author original.author &&
+ test_msg_author pick_--reset-author_--signoff
+'
+
+test_expect_success 'reword --reset-author' '
+ git checkout -b reword--reset-author master &&
+ commit_message HEAD >expected.msg &&
+ test_tick &&
+ authorship >expected.author &&
+ commit_authorship HEAD >original.author &&
+ test_diff_file expected.author original.author &&
+ test_msg_author reword_--reset-author
+'
+
+test_expect_success 'edit --reset-author' '
+ git checkout -b edit--reset-author master &&
+ commit_message HEAD >expected.msg &&
+ commit_authorship HEAD >original.author &&
+ test_diff_file expected.author original.author &&
+ set_fake_editor &&
+ FAKE_LINES="1 edit_--reset-author 2" git rebase -i HEAD~2 &&
+ >Commit2.t &&
+ git add Commit2.t &&
+ test_tick &&
+ authorship >expected.author &&
+ git rebase --continue &&
+ commit_message HEAD >actual.msg &&
+ commit_authorship HEAD >actual.author &&
+ test_cmp expected.msg actual.msg &&
+ test_cmp expected.author actual.author
+'
+
test_done
--
2.0.1
prev parent reply other threads:[~2014-08-18 21:24 UTC|newest]
Thread overview: 148+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-19 3:28 [RFC PATCH 0/7] rebase -i: Implement `reword` and `squash` in terms of `do_pick` Fabian Ruch
2014-07-02 17:47 ` [PATCH RFC v2 00/19] Enable options --signoff, --reset-author for pick, reword Fabian Ruch
2014-07-02 17:47 ` [PATCH RFC v2 01/19] rebase -i: Failed reword prints redundant error message Fabian Ruch
2014-07-08 20:31 ` Junio C Hamano
2014-07-10 14:30 ` Andrew Wong
2014-07-10 16:35 ` Fabian Ruch
2014-07-10 17:04 ` Andrew Wong
2014-07-02 17:47 ` [PATCH RFC v2 02/19] rebase -i: reword complains about empty commit despite --keep-empty Fabian Ruch
2014-07-08 20:37 ` Junio C Hamano
2014-07-09 18:02 ` Fabian Ruch
2014-07-02 17:47 ` [PATCH RFC v2 03/19] rebase -i: reword executes pre-commit hook on interim commit Fabian Ruch
2014-07-08 20:43 ` Junio C Hamano
2014-07-13 11:00 ` Fabian Ruch
2014-07-02 17:47 ` [PATCH RFC v2 04/19] rebase -i: Teach do_pick the option --edit Fabian Ruch
2014-07-02 17:47 ` [PATCH RFC v2 05/19] rebase -i: Implement reword in terms of do_pick Fabian Ruch
2014-08-04 15:16 ` Matthieu Moy
2014-08-04 15:45 ` Fabian Ruch
2014-07-02 17:47 ` [PATCH RFC v2 06/19] rebase -i: Stop on root commits with empty log messages Fabian Ruch
2014-07-08 22:26 ` Junio C Hamano
2014-07-10 9:29 ` Fabian Ruch
2014-07-10 16:57 ` Junio C Hamano
2014-07-10 17:33 ` Junio C Hamano
2014-07-02 17:47 ` [PATCH RFC v2 07/19] rebase -i: The replay of root commits is not shown with --verbose Fabian Ruch
2014-07-08 22:29 ` Junio C Hamano
2014-07-11 13:46 ` Fabian Ruch
2014-07-15 9:29 ` Chris Webb
2014-07-02 17:48 ` [PATCH RFC v2 08/19] rebase -i: Root commits are replayed with an unnecessary option Fabian Ruch
2014-07-08 22:32 ` Junio C Hamano
2014-07-18 9:16 ` Fabian Ruch
2014-07-18 16:52 ` Junio C Hamano
2014-07-19 18:14 ` Fabian Ruch
2014-07-02 17:48 ` [PATCH RFC v2 09/19] rebase -i: Commit only once when rewriting picks Fabian Ruch
2014-07-02 17:48 ` [PATCH RFC v2 10/19] rebase -i: Do not die in do_pick Fabian Ruch
2014-07-02 17:48 ` [PATCH RFC v2 11/19] rebase -i: Teach do_pick the option --amend Fabian Ruch
2014-07-02 17:48 ` [PATCH RFC v2 12/19] rebase -i: Teach do_pick the option --file Fabian Ruch
2014-07-02 17:48 ` [PATCH RFC v2 13/19] rebase -i: Prepare for squash in terms of do_pick --amend Fabian Ruch
2014-07-02 17:48 ` [PATCH RFC v2 14/19] rebase -i: Implement squash in terms of do_pick Fabian Ruch
2014-07-02 17:48 ` [PATCH RFC v2 15/19] rebase -i: Explicitly distinguish replay commands and exec tasks Fabian Ruch
2014-07-10 20:03 ` Junio C Hamano
2014-07-02 17:48 ` [PATCH RFC v2 16/19] rebase -i: Parse to-do list command line options Fabian Ruch
2014-07-02 17:48 ` [PATCH RFC v2 17/19] rebase -i: Teach do_pick the option --reset-author Fabian Ruch
2014-07-02 17:48 ` [PATCH RFC v2 18/19] rebase -i: Teach do_pick the option --signoff Fabian Ruch
2014-07-02 17:48 ` [PATCH RFC v2 19/19] rebase -i: Enable options --signoff, --reset-author for pick, reword Fabian Ruch
2014-07-03 10:33 ` [PATCH RFC v2 00/19] " Michael Haggerty
2014-07-08 20:45 ` Junio C Hamano
2014-07-09 16:08 ` Fabian Ruch
2014-07-18 12:10 ` Thomas Rast
2014-07-28 23:18 ` [PATCH v1 " Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 01/19] rebase -i: failed reword prints redundant error message Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 02/19] rebase -i: allow rewording an empty commit without complaints Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 03/19] rebase -i: reword executes pre-commit hook on interim commit Fabian Ruch
2014-08-01 23:47 ` Jeff King
2014-08-04 18:51 ` Fabian Ruch
2014-08-06 21:46 ` Jeff King
2014-07-28 23:18 ` [PATCH v1 04/19] rebase -i: teach do_pick the option --edit Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 05/19] rebase -i: implement reword in terms of do_pick Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 06/19] rebase -i: allow replaying commits with empty log messages Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 07/19] rebase -i: log the replay of root commits Fabian Ruch
2014-08-02 0:04 ` Jeff King
2014-08-04 21:21 ` Fabian Ruch
2014-08-06 22:01 ` Jeff King
2014-07-28 23:18 ` [PATCH v1 08/19] rebase -i: root commits are replayed with an unnecessary option Fabian Ruch
2014-08-02 0:13 ` Jeff King
2014-08-04 21:31 ` Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 09/19] rebase -i: commit only once when rewriting picks Fabian Ruch
2014-08-02 0:22 ` Jeff King
2014-08-07 0:24 ` Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 10/19] rebase -i: do not die in do_pick Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 11/19] rebase -i: teach do_pick the option --amend Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 12/19] rebase -i: teach do_pick the option --file Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 13/19] rebase -i: prepare for squash in terms of do_pick --amend Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 14/19] rebase -i: implement squash in terms of do_pick Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 15/19] rebase -i: explicitly distinguish replay commands and exec tasks Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 16/19] rebase -i: parse to-do list command line options Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 17/19] rebase -i: teach do_pick the option --reset-author Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 18/19] rebase -i: teach do_pick the option --signoff Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 19/19] rebase -i: enable options --signoff, --reset-author for pick, reword Fabian Ruch
2014-08-02 13:52 ` [PATCH v1 00/19] Enable " Jeff King
2014-08-04 8:37 ` Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 00/23] " Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 01/23] rebase -i: allow replaying commits with empty log messages Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 02/23] rebase -i: allow squashing empty commits without complaints Fabian Ruch
2014-08-07 7:16 ` Peter Krefting
2014-08-07 22:03 ` Eric Sunshine
2014-08-11 7:01 ` Fabian Ruch
2014-08-13 19:24 ` Phil Hord
2014-08-06 23:59 ` [PATCH v2 03/23] rebase -i: allow rewording " Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 04/23] rebase -i: hide interactive command messages in verbose mode Fabian Ruch
2014-08-08 19:09 ` Thomas Rast
2014-08-11 8:26 ` Fabian Ruch
2014-08-11 18:22 ` Thomas Rast
2014-08-06 23:59 ` [PATCH v2 05/23] rebase -i: failed reword prints redundant error message Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 06/23] commit: allow disabling pre-commit and commit-msg separately Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 07/23] rebase -i: squash skips commit-msg hook Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 08/23] rebase -i: reword executes pre-commit hook on interim commit Fabian Ruch
2014-08-08 19:09 ` Thomas Rast
2014-08-11 8:45 ` Fabian Ruch
2014-08-11 18:22 ` Thomas Rast
2014-08-06 23:59 ` [PATCH v2 09/23] rebase -i: teach do_pick the option --edit Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 10/23] rebase -i: implement reword in terms of do_pick Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 11/23] rebase -i: log the replay of root commits Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 12/23] rebase -i: root commits are replayed with an unnecessary option Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 13/23] rebase -i: commit only once when rewriting picks Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 14/23] rebase -i: do not die in do_pick Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 15/23] rebase -i: teach do_pick the option --amend Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 16/23] rebase -i: teach do_pick the option --file Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 17/23] rebase -i: prepare for squash in terms of do_pick --amend Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 18/23] rebase -i: implement squash in terms of do_pick Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 19/23] rebase -i: explicitly distinguish replay commands and exec tasks Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 20/23] rebase -i: parse to-do list command line options Fabian Ruch
2014-08-08 19:10 ` Thomas Rast
2014-08-11 20:56 ` Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 21/23] rebase -i: teach do_pick the option --reset-author Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 22/23] rebase -i: teach do_pick the option --signoff Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 23/23] rebase -i: enable options --signoff, --reset-author for pick, reword Fabian Ruch
2014-08-08 19:10 ` Thomas Rast
2014-08-12 21:04 ` Fabian Ruch
2014-08-13 12:47 ` Michael Haggerty
2014-08-14 17:24 ` Fabian Ruch
2014-09-21 16:59 ` Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 00/27] Enable options --signoff, --reset-author for pick, reword, edit Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 01/27] rebase -i: allow replaying commits with empty log messages Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 02/27] rebase -i: allow squashing empty commits without complaints Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 03/27] rebase -i: allow rewording " Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 04/27] fake_editor: leave standard output unchanged Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 05/27] rebase -i: hide interactive command messages in verbose mode Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 06/27] rebase -i: discard redundant message when rewording fails Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 07/27] commit: allow disabling pre-commit and commit-msg separately Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 08/27] rebase -i: verify squash messages using commit-msg Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 09/27] rebase -i: do not verify reworded patches using pre-commit Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 10/27] rebase -i: teach do_pick the option --edit Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 11/27] rebase -i: implement reword in terms of do_pick Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 12/27] rebase -i: log the replay of root commits Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 13/27] rebase -i: do not use -C when --no-edit is sufficient Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 14/27] rebase -i: commit only once when rewriting picks Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 15/27] rebase -i: do not die in do_pick Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 16/27] rebase -i: teach do_pick the option --amend Fabian Ruch
2014-08-18 21:23 ` [PATCH v3 17/27] rebase -i: teach do_pick the option --file Fabian Ruch
2014-08-18 21:23 ` [PATCH v3 18/27] rebase -i: remove no-op do_with_author git commit --amend Fabian Ruch
2014-08-18 21:23 ` [PATCH v3 19/27] rebase -i: prepare for squash in terms of do_pick --amend Fabian Ruch
2014-08-18 21:23 ` [PATCH v3 20/27] rebase -i: implement squash in terms of do_pick Fabian Ruch
2014-08-18 21:23 ` [PATCH v3 21/27] rebase -i: explicitly distinguish replay commands and exec tasks Fabian Ruch
2014-08-18 21:23 ` [PATCH v3 22/27] rebase -i: parse to-do list command line options Fabian Ruch
2014-08-18 21:23 ` [PATCH v3 23/27] rebase -i: teach do_pick the option --reset-author Fabian Ruch
2014-08-18 21:23 ` [PATCH v3 24/27] rebase -i: teach do_pick the option --signoff Fabian Ruch
2014-08-18 21:23 ` [PATCH v3 25/27] rebase -i: do not overwrite user author information Fabian Ruch
2014-08-18 21:23 ` [PATCH v3 26/27] rebase -i: refuse to commit when resuming with updated head Fabian Ruch
2014-08-18 21:23 ` Fabian Ruch [this message]
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=3e91ba1f6f59b9667c329b224a4f54bf0af9ee3e.1408396036.git.bafain@gmail.com \
--to=bafain@gmail.com \
--cc=git@vger.kernel.org \
--cc=mhagger@alum.mit.edu \
--cc=peff@peff.net \
--cc=tr@thomasrast.ch \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).