revert: accept arbitrary rev-list options
authorChristian Couder <chriscool@tuxfamily.org>
Mon, 14 Jun 2010 05:29:38 +0000 (00:29 -0500)
committerJunio C Hamano <gitster@pobox.com>
Fri, 25 Jun 2010 15:55:48 +0000 (08:55 -0700)
This can be useful to do something like:

git rev-list --reverse master -- README | git cherry-pick -n --stdin

without using xargs.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-cherry-pick.txt
builtin/revert.c
t/t3508-cherry-pick-many-commits.sh
index bcb4c758b748b53b7a990455bf4ef9d89f901079..ca485dbac19da231eca045bcf55c6b5df87e8dec 100644 (file)
@@ -113,6 +113,13 @@ git cherry-pick --ff ..next::
        are in next but not HEAD to the current branch, creating a new
        commit for each new change.
 
+git rev-list --reverse master \-- README | git cherry-pick -n --stdin::
+
+       Apply the changes introduced by all commits on the master
+       branch that touched README to the working tree and index,
+       so the result can be inspected and made into a single new
+       commit if suitable.
+
 Author
 ------
 Written by Junio C Hamano <gitster@pobox.com>
index 853e9e406c7fe258c39fa7e5c53f15f739a935b1..3f4a20edd0a5cd3a6a9668f0222d2cf813b969ef 100644 (file)
@@ -78,7 +78,8 @@ static void parse_args(int argc, const char **argv)
                        die("program error");
        }
 
-       commit_argc = parse_options(argc, argv, NULL, options, usage_str, 0);
+       commit_argc = parse_options(argc, argv, NULL, options, usage_str,
+                                   PARSE_OPT_KEEP_UNKNOWN);
        if (commit_argc < 1)
                usage_with_options(usage_str, options);
 
index 26a873032d7942f6696f9dbef3c14299d5186bac..93d7189fbc3c1089fe729d8a144ea15d15e7de33 100755 (executable)
@@ -92,4 +92,14 @@ test_expect_failure 'cherry-pick -3 fourth works' '
        test "$(git rev-parse --verify HEAD)" != "$(git rev-parse --verify fourth)"
 '
 
+test_expect_success 'cherry-pick --stdin works' '
+       git checkout -f master &&
+       git reset --hard first &&
+       test_tick &&
+       git rev-list --reverse first..fourth | git cherry-pick --stdin &&
+       git diff --quiet other &&
+       git diff --quiet HEAD other &&
+       test "$(git rev-parse --verify HEAD)" != "$(git rev-parse --verify fourth)"
+'
+
 test_done