Subject: [PATCH 4/4] reset: accept "git reset HEAD <path>" from unborn branch

From: Jonathan Nieder <[email-masked]>
Date: Tue, 19 Oct 2010 17:14:15 -0500

If I try:

	... hack hack hack ...
	git add .
	rm <path1>; # bad file!
	git reset <path1>

git will respond by informing me that this use of <path1> is
ambiguous.  So I might try to disambiguate:

	git reset HEAD <path1>

This works when HEAD represents a branch, but not in the 'new
repository' ('branch yet to be born') case.

Even in the unborn branch case, it is clear what the operator meant
to do (namely, remove the entry for <path1>), so do that.

Signed-off-by: Jonathan Nieder <[email-masked]>
---
 builtin/reset.c         |    5 ++---
 t/t7106-reset-unborn.sh |    5 ++++-
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/builtin/reset.c b/builtin/reset.c
index ff57764..d9a5702 100644
--- a/builtin/reset.c
+++ b/builtin/reset.c
@@ -236,12 +236,11 @@ static void die_if_unmerged_cache(int reset_type)
 int cmd_reset(int argc, const char **argv, const char *prefix)
 {
 	int i = 0, reset_type = NONE, update_ref_status = 0, quiet = 0;
 	int unborn_branch = 0;
 	int patch_mode = 0;
-	const char *implicit_HEAD = "HEAD";
-	const char *rev = implicit_HEAD;
+	const char *rev = "HEAD";
 	unsigned char sha1[20], *orig = NULL, sha1_orig[20],
 				*old_orig = NULL, sha1_old_orig[20];
 	struct commit *commit;
 	char *reflog_action, msg[1024];
 	const struct option options[] = {
@@ -305,11 +304,11 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
 		if (reset_type != NONE)
 			die("--patch is incompatible with --{hard,mixed,soft}");
 		return interactive_reset(rev, argv + i, prefix);
 	}
 
-	if (rev == implicit_HEAD) {
+	if (!strcmp(rev, "HEAD")) {
 		/* We may be on a branch yet to be born. */
 		resolve_ref("HEAD", sha1, 0, NULL);
 		if (is_null_sha1(sha1)) {
 			unborn_branch = 1;
 			hashcpy(sha1, (const unsigned char *) EMPTY_TREE_SHA1_BIN);
diff --git a/t/t7106-reset-unborn.sh b/t/t7106-reset-unborn.sh
index 7baaffd..c03f309 100755
--- a/t/t7106-reset-unborn.sh
+++ b/t/t7106-reset-unborn.sh
@@ -37,11 +37,14 @@ test_expect_success 'reset absent file' '
 	git reset -- file &&
 	index_is_empty
 '
 
 test_expect_success 'reset HEAD <files> from unborn branch' '
-	test_must_fail git reset HEAD -- .
+	echo one >file &&
+	git add file &&
+	git reset HEAD -- . &&
+	index_is_empty
 '
 
 test_expect_success 'reset HEAD from unborn branch' '
 	test_must_fail git reset HEAD &&
 	test_must_fail git reset HEAD --
-- 
1.7.2.3