-
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.
checkout: introduce --detach synonym for "git checkout foo^{commit}"
For example, one might use this when making a temporary merge to test that two topics work well together. Patch by Junio, with tests from Jeff King. [jn: with some extra checks for bogus commandline usage] Suggested-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
- Loading branch information
Junio C Hamano
committed
Feb 8, 2011
1 parent
09ebad6
commit 3266967
Showing
3 changed files
with
126 additions
and
7 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
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,95 @@ | ||
#!/bin/sh | ||
|
||
test_description='checkout into detached HEAD state' | ||
. ./test-lib.sh | ||
|
||
check_detached () { | ||
test_must_fail git symbolic-ref -q HEAD >/dev/null | ||
} | ||
|
||
check_not_detached () { | ||
git symbolic-ref -q HEAD >/dev/null | ||
} | ||
|
||
reset () { | ||
git checkout master && | ||
check_not_detached | ||
} | ||
|
||
test_expect_success 'setup' ' | ||
test_commit one && | ||
test_commit two && | ||
git branch branch && | ||
git tag tag | ||
' | ||
|
||
test_expect_success 'checkout branch does not detach' ' | ||
reset && | ||
git checkout branch && | ||
check_not_detached | ||
' | ||
|
||
test_expect_success 'checkout tag detaches' ' | ||
reset && | ||
git checkout tag && | ||
check_detached | ||
' | ||
|
||
test_expect_success 'checkout branch by full name detaches' ' | ||
reset && | ||
git checkout refs/heads/branch && | ||
check_detached | ||
' | ||
|
||
test_expect_success 'checkout non-ref detaches' ' | ||
reset && | ||
git checkout branch^ && | ||
check_detached | ||
' | ||
|
||
test_expect_success 'checkout ref^0 detaches' ' | ||
reset && | ||
git checkout branch^0 && | ||
check_detached | ||
' | ||
|
||
test_expect_success 'checkout --detach detaches' ' | ||
reset && | ||
git checkout --detach branch && | ||
check_detached | ||
' | ||
|
||
test_expect_success 'checkout --detach without branch name' ' | ||
reset && | ||
git checkout --detach && | ||
check_detached | ||
' | ||
|
||
test_expect_success 'checkout --detach errors out for non-commit' ' | ||
reset && | ||
test_must_fail git checkout --detach one^{tree} && | ||
check_not_detached | ||
' | ||
|
||
test_expect_success 'checkout --detach errors out for extra argument' ' | ||
reset && | ||
git checkout master && | ||
test_must_fail git checkout --detach tag one.t && | ||
check_not_detached | ||
' | ||
|
||
test_expect_success 'checkout --detached and -b are incompatible' ' | ||
reset && | ||
test_must_fail git checkout --detach -b newbranch tag && | ||
check_not_detached | ||
' | ||
|
||
test_expect_success 'checkout --detach moves HEAD' ' | ||
reset && | ||
git checkout one && | ||
git checkout --detach two && | ||
git diff --exit-code HEAD && | ||
git diff --exit-code two | ||
' | ||
|
||
test_done |