mirror of
https://github.com/git/git
synced 2024-08-25 10:45:59 +00:00
commit: add support for --fixup <commit> -m"<extra message>"
Add support for supplying the -m option with --fixup. Doing so has
errored out ever since --fixup was introduced. Before this, the only
way to amend the fixup message while committing was to use --edit and
amend it in the editor.
The use-case for this feature is one of:
* Leaving a quick note to self when creating a --fixup commit when
it's not self-evident why the commit should be squashed without a
note into another one.
* (Ab)using the --fixup feature to "fix up" commits that have already
been pushed to a branch that doesn't allow non-fast-forwards,
i.e. just noting "this should have been part of that other commit",
and if the history ever got rewritten in the future the two should
be combined.
In such a case you might want to leave a small message,
e.g. "forgot this part, which broke XYZ".
With this, --fixup <commit> -m"More" -m"Details" will result in a
commit message like:
!fixup <subject of <commit>>
More
Details
The reason the test being added here seems to squash "More" at the end
of the subject line of the commit being fixed up is because the test
code is using "%s%b" so the body immediately follows the subject, it's
not a bug in this code, and other tests t7500-commit.sh do the same
thing.
When the --fixup option was initially added the "Option -m cannot be
combined" error was expanded from -c, -C and -F to also include
--fixup[1]
Those options could also support combining with -m, but given what
they do I can't think of a good use-case for doing that, so I have not
made the more invasive change of splitting up the logic in commit.c to
first act on those, and then on -m options.
1. d71b8ba7c9
("commit: --fixup option for use with rebase
--autosquash", 2010-11-02)
Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
f55e84fff9
commit
30884c9afc
|
@ -145,8 +145,7 @@ OPTIONS
|
||||||
If multiple `-m` options are given, their values are
|
If multiple `-m` options are given, their values are
|
||||||
concatenated as separate paragraphs.
|
concatenated as separate paragraphs.
|
||||||
+
|
+
|
||||||
The `-m` option is mutually exclusive with `-c`, `-C`, `-F`, and
|
The `-m` option is mutually exclusive with `-c`, `-C`, and `-F`.
|
||||||
`--fixup`.
|
|
||||||
|
|
||||||
-t <file>::
|
-t <file>::
|
||||||
--template=<file>::
|
--template=<file>::
|
||||||
|
|
|
@ -701,7 +701,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (have_option_m) {
|
if (have_option_m && !fixup_message) {
|
||||||
strbuf_addbuf(&sb, &message);
|
strbuf_addbuf(&sb, &message);
|
||||||
hook_arg1 = "message";
|
hook_arg1 = "message";
|
||||||
} else if (logfile && !strcmp(logfile, "-")) {
|
} else if (logfile && !strcmp(logfile, "-")) {
|
||||||
|
@ -731,6 +731,8 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
|
||||||
ctx.output_encoding = get_commit_output_encoding();
|
ctx.output_encoding = get_commit_output_encoding();
|
||||||
format_commit_message(commit, "fixup! %s\n\n",
|
format_commit_message(commit, "fixup! %s\n\n",
|
||||||
&sb, &ctx);
|
&sb, &ctx);
|
||||||
|
if (have_option_m)
|
||||||
|
strbuf_addbuf(&sb, &message);
|
||||||
hook_arg1 = "message";
|
hook_arg1 = "message";
|
||||||
} else if (!stat(git_path_merge_msg(), &statbuf)) {
|
} else if (!stat(git_path_merge_msg(), &statbuf)) {
|
||||||
/*
|
/*
|
||||||
|
@ -1197,8 +1199,8 @@ static int parse_and_validate_options(int argc, const char *argv[],
|
||||||
f++;
|
f++;
|
||||||
if (f > 1)
|
if (f > 1)
|
||||||
die(_("Only one of -c/-C/-F/--fixup can be used."));
|
die(_("Only one of -c/-C/-F/--fixup can be used."));
|
||||||
if (have_option_m && f > 0)
|
if (have_option_m && (edit_message || use_message || logfile))
|
||||||
die((_("Option -m cannot be combined with -c/-C/-F/--fixup.")));
|
die((_("Option -m cannot be combined with -c/-C/-F.")));
|
||||||
if (f || have_option_m)
|
if (f || have_option_m)
|
||||||
template_file = NULL;
|
template_file = NULL;
|
||||||
if (edit_message)
|
if (edit_message)
|
||||||
|
|
|
@ -272,6 +272,14 @@ test_expect_success 'commit --fixup provides correct one-line commit message' '
|
||||||
commit_msg_is "fixup! target message subject line"
|
commit_msg_is "fixup! target message subject line"
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'commit --fixup -m"something" -m"extra"' '
|
||||||
|
commit_for_rebase_autosquash_setup &&
|
||||||
|
git commit --fixup HEAD~1 -m"something" -m"extra" &&
|
||||||
|
commit_msg_is "fixup! target message subject linesomething
|
||||||
|
|
||||||
|
extra"
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'commit --squash works with -F' '
|
test_expect_success 'commit --squash works with -F' '
|
||||||
commit_for_rebase_autosquash_setup &&
|
commit_for_rebase_autosquash_setup &&
|
||||||
echo "log message from file" >msgfile &&
|
echo "log message from file" >msgfile &&
|
||||||
|
@ -325,7 +333,6 @@ test_expect_success 'invalid message options when using --fixup' '
|
||||||
test_must_fail git commit --fixup HEAD~1 --squash HEAD~2 &&
|
test_must_fail git commit --fixup HEAD~1 --squash HEAD~2 &&
|
||||||
test_must_fail git commit --fixup HEAD~1 -C HEAD~2 &&
|
test_must_fail git commit --fixup HEAD~1 -C HEAD~2 &&
|
||||||
test_must_fail git commit --fixup HEAD~1 -c HEAD~2 &&
|
test_must_fail git commit --fixup HEAD~1 -c HEAD~2 &&
|
||||||
test_must_fail git commit --fixup HEAD~1 -m "cmdline message" &&
|
|
||||||
test_must_fail git commit --fixup HEAD~1 -F log
|
test_must_fail git commit --fixup HEAD~1 -F log
|
||||||
'
|
'
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue