-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Some users seem to think, knowingly or not, that being on an unborn branch is like having a commit with an empty tree checked out, but when run on an unborn branch, "git reset" currently fails with: fatal: Failed to resolve 'HEAD' as a valid ref. Instead of making users figure out that they should run git rm --cached -r . , let's teach "git reset" without a revision argument, when on an unborn branch, to behave as if the user asked to reset to an empty tree. Don't take the analogy with an empty commit too far, though, but still disallow explictly referring to HEAD in "git reset HEAD". Signed-off-by: Martin von Zweigbergk <martinvonz@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
- Loading branch information
Martin von Zweigbergk
authored and
Junio C Hamano
committed
Jan 15, 2013
1 parent
2f328c3
commit 166ec2e
Showing
2 changed files
with
62 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
#!/bin/sh | ||
|
||
test_description='git reset should work on unborn branch' | ||
. ./test-lib.sh | ||
|
||
test_expect_success 'setup' ' | ||
echo a >a && | ||
echo b >b | ||
' | ||
|
||
test_expect_success 'reset' ' | ||
git add a b && | ||
git reset && | ||
test "$(git ls-files)" = "" | ||
' | ||
|
||
test_expect_success 'reset HEAD' ' | ||
rm .git/index && | ||
git add a b && | ||
test_must_fail git reset HEAD | ||
' | ||
|
||
test_expect_success 'reset $file' ' | ||
rm .git/index && | ||
git add a b && | ||
git reset a && | ||
test "$(git ls-files)" = "b" | ||
' | ||
|
||
test_expect_success 'reset -p' ' | ||
rm .git/index && | ||
git add a && | ||
echo y | git reset -p && | ||
test "$(git ls-files)" = "" | ||
' | ||
|
||
test_expect_success 'reset --soft is a no-op' ' | ||
rm .git/index && | ||
git add a && | ||
git reset --soft | ||
test "$(git ls-files)" = "a" | ||
' | ||
|
||
test_expect_success 'reset --hard' ' | ||
rm .git/index && | ||
git add a && | ||
git reset --hard && | ||
test "$(git ls-files)" = "" && | ||
test_path_is_missing a | ||
' | ||
|
||
test_done |