This can be useful to do something like: git rev-list --reverse master -- README | git cherry-pick -n --stdin without using xargs. As an added bonus it makes "git cherry-pick -3 fourth" work. Signed-off-by: Christian Couder <chriscool@xxxxxxxxxxxxx> Signed-off-by: Jonathan Nieder <jrnieder@xxxxxxxxx> --- Documentation/git-cherry-pick.txt | 14 +++++++++++++- Documentation/git-revert.txt | 7 ++++++- builtin/revert.c | 3 ++- t/t3508-cherry-pick-many-commits.sh | 12 +++++++++++- 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/Documentation/git-cherry-pick.txt b/Documentation/git-cherry-pick.txt index bcb4c75..0711efd 100644 --- a/Documentation/git-cherry-pick.txt +++ b/Documentation/git-cherry-pick.txt @@ -7,7 +7,8 @@ git-cherry-pick - Apply the changes introduced by some existing commits SYNOPSIS -------- -'git cherry-pick' [--edit] [-n] [-m parent-number] [-s] [-x] [--ff] <commit>... +'git cherry-pick' [--edit] [-n] [-m parent-number] [-s] [-x] [--ff] + [<rev-list-options>] <commit>... DESCRIPTION ----------- @@ -26,6 +27,10 @@ OPTIONS default, as if the '--no-walk' option was specified, see linkgit:git-rev-list[1]. +<rev-list-options>:: + Unrecognized options are used as options to list commits, see + linkgit:git-rev-list[1]. + -e:: --edit:: With this option, 'git cherry-pick' will let you edit the commit @@ -113,6 +118,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@xxxxxxxxx> diff --git a/Documentation/git-revert.txt b/Documentation/git-revert.txt index dea4f53..e5f129e 100644 --- a/Documentation/git-revert.txt +++ b/Documentation/git-revert.txt @@ -7,7 +7,8 @@ git-revert - Revert some existing commits SYNOPSIS -------- -'git revert' [--edit | --no-edit] [-n] [-m parent-number] [-s] <commit>... +'git revert' [--edit | --no-edit] [-n] [-m parent-number] [-s] + [<rev-list-options>] <commit>... DESCRIPTION ----------- @@ -36,6 +37,10 @@ OPTIONS default, see linkgit:git-rev-list[1] and its '--no-walk' option. +<rev-list-options>:: + Unrecognized options are used as options to list commits, see + linkgit:git-rev-list[1]. + -e:: --edit:: With this option, 'git revert' will let you edit the commit diff --git a/builtin/revert.c b/builtin/revert.c index 853e9e4..3f4a20e 100644 --- a/builtin/revert.c +++ b/builtin/revert.c @@ -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); diff --git a/t/t3508-cherry-pick-many-commits.sh b/t/t3508-cherry-pick-many-commits.sh index 26a8730..f90ed3d 100755 --- a/t/t3508-cherry-pick-many-commits.sh +++ b/t/t3508-cherry-pick-many-commits.sh @@ -82,7 +82,7 @@ test_expect_success 'revert fourth fourth~1 fourth~2 works' ' git diff --quiet HEAD first ' -test_expect_failure 'cherry-pick -3 fourth works' ' +test_expect_success 'cherry-pick -3 fourth works' ' git checkout -f master && git reset --hard first && test_tick && @@ -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 -- 1.7.1.530.g14dc.dirty -- 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