--- Junio C Hamano <junkio@xxxxxxx> wrote: > * Detaching head would say which commit I am at and reminds me that > I am not on any branch (not that I would detach my HEAD while keeping > precious local changes around in any real-world workflow -- this is > just a sample session). > > [git.git (master)]$ git checkout master^ > M git-checkout.sh > Note: you are not on any branch and are at commit "master^" > If you want to create a new branch from this checkout, you may do so > (now or later) by using -b with the checkout command again. Example: > git checkout -b <new_branch_name> > > * Coming back to an attached state can lose the detached HEAD, so > I get warned and stopped. > > [git.git]$ git checkout master > You are not on any branch and switching to branch 'master' > may lose your changes. At this point, you can do one of two things: > (1) Decide it is Ok and say 'git checkout -f master'; > (2) Start a new branch from the current commit, by saying > 'git checkout -b <branch-name>'. > Leaving your HEAD detached; not switching to branch 'master'. I think these two are too long, after a few times one knows exactly what to do and all this text is not necessary anymore. Perhaps the name (ui.guide) should be different, I just did not find any category to put this in. The variable could become a general variable to enable/disable very verbose explanations what to do in a situation. --- git-checkout.sh | 14 ++++++++++++-- 1 files changed, 12 insertions(+), 2 deletions(-) diff --git a/git-checkout.sh b/git-checkout.sh index deb4795..1eb8b06 100755 --- a/git-checkout.sh +++ b/git-checkout.sh @@ -5,6 +5,8 @@ SUBDIRECTORY_OK=Sometimes . git-sh-setup require_work_tree +guide=$(git repo-config --bool --get ui.guide) +[ -z "$guide" ] && guide=true old_name=HEAD old=$(git-rev-parse --verify $old_name 2>/dev/null) oldbranch=$(git-symbolic-ref $old_name 2>/dev/null) @@ -155,10 +157,13 @@ then detached="$new" if test -n "$oldbranch" then - detach_warn="Note: you are not on any branch and are at commit \"$new_name\" + detach_warn="Note: you are not on any branch and are at commit \"$new_name\"" + if test "$guide" = true; then + detach_warn="$detach_warn If you want to create a new branch from this checkout, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b <new_branch_name>" + fi fi elif test -z "$oldbranch" && test -n "$branch" then @@ -166,13 +171,18 @@ then if test -z "$force" then git show-ref -d -s | grep "$old" >/dev/null || { - echo >&2 \ + if test "$guide" = true; then + echo >&2 \ "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'." + else + echo >&2 \ +"HEAD detached; use -f to switch to branch '$new_name'." + fi exit 1; } fi -- 1.5.0.rc3.g4a88 - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html