Browse Source

commit: make --only --allow-empty work without paths

--only is implied when paths are present, and required
them unless --amend. But with --allow-empty it should
be allowed as well - it is the only way to create an
empty commit in the presence of staged changes.

Signed-off-by: Andreas Krey <a.krey@gmx.de>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Andreas Krey 8 years ago committed by Junio C Hamano
parent
commit
319d835240
  1. 3
      Documentation/git-commit.txt
  2. 2
      builtin/commit.c
  3. 9
      t/t7501-commit.sh

3
Documentation/git-commit.txt

@ -263,7 +263,8 @@ FROM UPSTREAM REBASE" section in linkgit:git-rebase[1].)
If this option is specified together with `--amend`, then If this option is specified together with `--amend`, then
no paths need to be specified, which can be used to amend no paths need to be specified, which can be used to amend
the last commit without committing changes that have the last commit without committing changes that have
already been staged. already been staged. If used together with `--allow-empty`
paths are also not required, and an empty commit will be created.


-u[<mode>]:: -u[<mode>]::
--untracked-files[=<mode>]:: --untracked-files[=<mode>]::

2
builtin/commit.c

@ -1201,7 +1201,7 @@ static int parse_and_validate_options(int argc, const char *argv[],


if (also + only + all + interactive > 1) if (also + only + all + interactive > 1)
die(_("Only one of --include/--only/--all/--interactive/--patch can be used.")); die(_("Only one of --include/--only/--all/--interactive/--patch can be used."));
if (argc == 0 && (also || (only && !amend))) if (argc == 0 && (also || (only && !amend && !allow_empty)))
die(_("No paths with --include/--only does not make sense.")); die(_("No paths with --include/--only does not make sense."));
if (argc == 0 && only && amend) if (argc == 0 && only && amend)
only_include_assumed = _("Clever... amending the last one with dirty index."); only_include_assumed = _("Clever... amending the last one with dirty index.");

9
t/t7501-commit.sh

@ -155,6 +155,15 @@ test_expect_success 'amend --only ignores staged contents' '
git diff --exit-code git diff --exit-code
' '


test_expect_success 'allow-empty --only ignores staged contents' '
echo changed-again >file &&
git add file &&
git commit --allow-empty --only -m "empty" &&
git cat-file blob HEAD:file >file.actual &&
test_cmp file.expect file.actual &&
git diff --exit-code
'

test_expect_success 'set up editor' ' test_expect_success 'set up editor' '
cat >editor <<-\EOF && cat >editor <<-\EOF &&
#!/bin/sh #!/bin/sh

Loading…
Cancel
Save