diff options
-rw-r--r-- | Documentation/git-commit.txt | 8 | ||||
-rwxr-xr-x | git-commit.sh | 13 | ||||
-rwxr-xr-x | t/t7501-commit.sh | 7 |
3 files changed, 24 insertions, 4 deletions
diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt index d4bfd49ce1..a7ef71ff99 100644 --- a/Documentation/git-commit.txt +++ b/Documentation/git-commit.txt @@ -10,7 +10,7 @@ SYNOPSIS [verse] 'git-commit' [-a | --interactive] [-s] [-v] [-u] [(-c | -C) <commit> | -F <file> | -m <msg> | --amend] - [--no-verify] [-e] [--author <author>] + [--allow-empty] [--no-verify] [-e] [--author <author>] [--] [[-i | -o ]<file>...] DESCRIPTION @@ -89,6 +89,12 @@ OPTIONS This option bypasses the pre-commit hook. See also link:hooks.html[hooks]. +--allow-empty:: + Usually recording a commit that has the exact same tree as its + sole parent commit and the command prevents you from making such + a mistake. This option bypasses the safety, and is primarily + for use by foreign scm interface scripts. + -e|--edit:: The message taken from file with `-F`, command line with `-m`, and from file with `-C` are usually used as the diff --git a/git-commit.sh b/git-commit.sh index cef76a7775..2c4a4062a5 100755 --- a/git-commit.sh +++ b/git-commit.sh @@ -74,6 +74,7 @@ trap ' all= also= +allow_empty=f interactive= only= logfile= @@ -114,6 +115,10 @@ do -a|--a|--al|--all) all=t ;; + --allo|--allow|--allow-|--allow-e|--allow-em|--allow-emp|\ + --allow-empt|--allow-empty) + allow_empty=t + ;; --au=*|--aut=*|--auth=*|--autho=*|--author=*) force_author="${1#*=}" ;; @@ -515,9 +520,11 @@ else # we need to check if there is anything to commit run_status >/dev/null fi -case "$?,$PARENTS" in -0,* | *,-p' '?*-p' '?*) - # a merge commit can record the same tree as its parent. +case "$allow_empty,$?,$PARENTS" in +t,* | ?,0,* | ?,*,-p' '?*-p' '?*) + # an explicit --allow-empty, or a merge commit can record the + # same tree as its parent. Otherwise having commitable paths + # is required. ;; *) rm -f "$GIT_DIR/COMMIT_EDITMSG" "$GIT_DIR/SQUASH_MSG" diff --git a/t/t7501-commit.sh b/t/t7501-commit.sh index 2e7bcb016a..0316ecf5a1 100755 --- a/t/t7501-commit.sh +++ b/t/t7501-commit.sh @@ -256,6 +256,13 @@ test_expect_success 'same tree (single parent)' ' ' +test_expect_success 'same tree (single parent) --allow-empty' ' + + git commit --allow-empty -m "forced empty" && + git cat-file commit HEAD | grep forced + +' + test_expect_success 'same tree (merge and amend merge)' ' git checkout -b side HEAD^ && |