Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2007-01-10 04:37:50 +0300
committerJunio C Hamano <junkio@cox.net>2007-01-10 04:44:59 +0300
commit75b364dfe28cf1700ac4f519ff7d3e42505e17a6 (patch)
treef62ec35e1a087ae0cda30dd6669429c3503d7e79
parent8d78b5af2376be533ed11b53b292bdf0f2e6173b (diff)
git-checkout: safety check for detached HEAD checks existing refs
Checking for reachability from refs does not help much if the state we are currently on is somewhere in the middle. We will lose where we were. So this makes sureh that HEAD is something directly pointed at by one of the existing refs (most likely a tag for a user who has been "sightseeing"). Signed-off-by: Junio C Hamano <junkio@cox.net>
-rwxr-xr-xgit-checkout.sh14
1 files changed, 7 insertions, 7 deletions
diff --git a/git-checkout.sh b/git-checkout.sh
index a309bf0a1a..dcf6ddbdf1 100755
--- a/git-checkout.sh
+++ b/git-checkout.sh
@@ -171,14 +171,14 @@ then
# Coming back...
if test -z "$force"
then
- mb=$(git merge-base --all $old $new) &&
- case "$LF$mb$LF" in
- *"$LF$old$LF"*) : ;;
- *) false ;;
- esac || {
+ git show-ref -d -s | grep "$old" >/dev/null || {
echo >&2 \
-"You are not on a branch and switching to $new_name branch may lose
-your changes. Use 'git checkout -f $new_name' if you want to."
+"You are not on any branch and switching to branch '$new_name'
+may lose your changes. At this point, you can do one of two things:
+ (1) Decide it is Ok and say 'git checkout -f $new_name';
+ (2) Start a new branch from the current commit, by saying
+ 'git checkout -b <branch-name>'.
+Leaving your HEAD detached; not switching to branch '$new_name'."
exit 1;
}
fi