Dave Abrahams wrote: > You're going to love this: I had sent a pull request upstream and the > maintainer of the project rejected my changes because I didn't follow > some formatting convention he didn't tell me about ;-). So I set up a > commit hook that would prevent me from making the same mistake again, > and cherry-picked the changes one-by-one. Funny. Maybe "cherry-pick --no-commit" followed by ordinary commit would be appropriate? That way, when the checks fail, you are in a position to clean them up. If the conventions were whitespace related, "git rebase --whitespace=fix" might be even more useful. Just for kicks, here is the cherry-pick --verify for picky cherry-pickers. -- 8< -- Subject: cherry-pick/revert: learn --verify to run pre-commit and commit-msg hooks The main purpose of the pre-commit and commit-msg hooks is to avoid introducing regressions in whitespace style, encoding, and so forth; and it would make cherry-picking unnecessarily difficult, without preventing regressions, to unconditionally apply the same standards to existing code. For this reason, in v0.99.6~51 (2005-08-29), git learned to skip the usual hooks when cherry-picking or reverting an existing commit. But sometimes the checks are wanted anyway. For example, with this patch applied, you can safely fetch some new contributor's code: $ git cherry-pick -s --verify HEAD..FETCH_HEAD while allowing the pre-commit and commit-msg hooks to run their usual checks so the result can error out if the patches are not clean. Signed-off-by: Jonathan Nieder <jrnieder@xxxxxxxxx> --- Untested. Please feel free to add some documentation and tests and submit it for real if this looks like a good idea. :) builtin/revert.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) diff --git a/builtin/revert.c b/builtin/revert.c index bb6e9e8..511b2ea 100644 --- a/builtin/revert.c +++ b/builtin/revert.c @@ -36,7 +36,7 @@ static const char * const cherry_pick_usage[] = { NULL }; -static int edit, no_replay, no_commit, mainline, signoff, allow_ff; +static int edit, no_replay, no_commit, verify, mainline, signoff, allow_ff; static enum { REVERT, CHERRY_PICK } action; static struct commit *commit; static int commit_argc; @@ -67,6 +67,7 @@ static void parse_args(int argc, const char **argv) OPT_INTEGER('m', "mainline", &mainline, "parent number"), OPT_RERERE_AUTOUPDATE(&allow_rerere_auto), OPT_STRING(0, "strategy", &strategy, "strategy", "merge strategy"), + OPT_BOOLEAN(0, "verify", &verify, "let hooks intervene before commiting"), OPT_END(), OPT_END(), OPT_END(), @@ -375,7 +376,8 @@ static int run_git_commit(const char *defmsg) int i = 0; args[i++] = "commit"; - args[i++] = "-n"; + if (!verify) + args[i++] = "-n"; if (signoff) args[i++] = "-s"; if (!edit) { -- 1.7.2.4 -- 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