git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2] commit: make --only --allow-empty work without paths

From
Andreas Krey <a.krey@gmx.de>
Date
Dec 8, 2016, 13:50 UTC
Message-ID
<20161208135029.GA16292@inner.h.apk.li>
In-Reply-To
<xmqqd1h63xqn.fsf@gitster.mtv.corp.google.com>

--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.

Also remove the post-fact cleverness indication; it's in the man page anyway.

Signed-off-by: Andreas Krey <a.krey@gmx.de>
---

Ok, I've removed the clever message, as Junio suggested. I don't know what else to do to make it acceptable. :-) We're going to deploy it internally anyway, but I think it belongs in git.git as well (aka 'Can I has "will queue"?').

 Documentation/git-commit.txt | 3 ++-
 builtin/commit.c             | 4 +---
 t/t7501-commit.sh            | 9 +++++++++
 3 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt
index f2ab0ee2e..4f8f20a36 100644
--- a/Documentation/git-commit.txt
+++ b/Documentation/git-commit.txt
@@ -265,7 +265,8 @@ FROM UPSTREAM REBASE" section in linkgit:git-rebase[1].)
 	If this option is specified together with `--amend`, then
 	no paths need to be specified, which can be used to amend
 	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>]::
 --untracked-files[=<mode>]::
diff --git a/builtin/commit.c b/builtin/commit.c
index 8976c3d29..276c74034 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -1206,10 +1206,8 @@ static int parse_and_validate_options(int argc, const char *argv[],
 
 	if (also + only + all + interactive > 1)
 		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."));
-	if (argc == 0 && only && amend)
-		only_include_assumed = _("Clever... amending the last one with dirty index.");
 	if (argc > 0 && !also && !only)
 		only_include_assumed = _("Explicit paths specified without -i or -o; assuming --only paths...");
 	if (!cleanup_arg || !strcmp(cleanup_arg, "default"))
diff --git a/t/t7501-commit.sh b/t/t7501-commit.sh
index d84897a67..0d8d89309 100755
--- a/t/t7501-commit.sh
+++ b/t/t7501-commit.sh
@@ -155,6 +155,15 @@ test_expect_success 'amend --only ignores staged contents' '
 	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' '
 	cat >editor <<-\EOF &&
 	#!/bin/sh
-- 
2.11.0.10.g1e1b186.dirty
Previous: Junio C HamanoNext: Junio C Hamano
Message 8 of 10 in “commit: make --only --allow-empty work without paths”
  1. commit: make --only --allow-empty work without pathsAndreas Krey, Dec 2, 2016
  2. Jeff KingDec 3, 2016
  3. Andreas KreyDec 3, 2016
  4. Jeff KingDec 3, 2016
  5. Junio C HamanoDec 5, 2016
  6. Andreas KreyDec 6, 2016
  7. Junio C HamanoDec 5, 2016
  8. commit: make --only --allow-empty work without pathsAndreas Krey, Dec 8, 2016
  9. Junio C HamanoDec 8, 2016
  10. commit: remove 'Clever' message for --only --amendAndreas Krey, Dec 9, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.