X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=git-checkout.sh;h=6b6facfd5a224afca735d4693d304726f4032e6f;hb=ed82edc402c271a707da632083f1f4c19155d573;hp=39ffa8b8a3322b623a6d4938d566453fe206ca69;hpb=bb95e19c5f1e470d2efe1c0e4e04c291019e4b25;p=git.git diff --git a/git-checkout.sh b/git-checkout.sh index 39ffa8b8a..6b6facfd5 100755 --- a/git-checkout.sh +++ b/git-checkout.sh @@ -17,6 +17,7 @@ newbranch= newbranch_log= merge= quiet= +v=-v LF=' ' while [ "$#" != "0" ]; do @@ -47,6 +48,7 @@ while [ "$#" != "0" ]; do ;; "-q") quiet=1 + v= ;; --) break @@ -163,7 +165,14 @@ cd_to_toplevel detached= detach_warn= -if test -z "$branch$newbranch" && test "$new" != "$old" +describe_detached_head () { + test -n "$quiet" || { + printf >&2 "$1 " + GIT_PAGER= git log >&2 -1 --pretty=oneline --abbrev-commit "$2" + } +} + +if test -z "$branch$newbranch" && test "$new_name" != "$old_name" then detached="$new" if test -n "$oldbranch" && test -z "$quiet" @@ -173,9 +182,9 @@ 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 " fi -elif test -z "$oldbranch" && test -z "$quiet" +elif test -z "$oldbranch" && test "$new" != "$old" then - echo >&2 "Previous HEAD position was $old" + describe_detached_head 'Previous HEAD position was' "$old" fi if [ "X$old" = X ] @@ -190,7 +199,7 @@ fi if [ "$force" ] then - git-read-tree --reset -u $new + git-read-tree $v --reset -u $new else git-update-index --refresh >/dev/null merge_error=$(git-read-tree -m -u --exclude-per-directory=.gitignore $old $new 2>&1) || ( @@ -203,7 +212,7 @@ else # Match the index to the working tree, and do a three-way. git diff-files --name-only | git update-index --remove --stdin && work=`git write-tree` && - git read-tree --reset -u $new || exit + git read-tree $v --reset -u $new || exit eval GITHEAD_$new='${new_name:-${branch:-$new}}' && eval GITHEAD_$work=local && @@ -214,7 +223,7 @@ else # this is not a real merge before committing, but just carrying # the working tree changes along. unmerged=`git ls-files -u` - git read-tree --reset $new + git read-tree $v --reset $new case "$unmerged" in '') ;; *) @@ -250,26 +259,24 @@ if [ "$?" -eq 0 ]; then if test -n "$branch" then GIT_DIR="$GIT_DIR" git-symbolic-ref -m "checkout: moving to $branch" HEAD "refs/heads/$branch" - if test -z "$quiet" + if test -n "$quiet" + then + true # nothing + elif test "refs/heads/$branch" = "$oldbranch" then + echo >&2 "Already on branch \"$branch\"" + else echo >&2 "Switched to${newbranch:+ a new} branch \"$branch\"" fi elif test -n "$detached" then - # NEEDSWORK: we would want a command to detach the HEAD - # atomically, instead of this handcrafted command sequence. - # Perhaps: - # git update-ref --detach HEAD $new - # or something like that... - # - git-rev-parse HEAD >"$GIT_DIR/HEAD.new" && - mv "$GIT_DIR/HEAD.new" "$GIT_DIR/HEAD" && - git-update-ref -m "checkout: moving to $arg" HEAD "$detached" || + git-update-ref --no-deref -m "checkout: moving to $arg" HEAD "$detached" || die "Cannot detach HEAD" if test -n "$detach_warn" then echo >&2 "$detach_warn" fi + describe_detached_head 'HEAD is now at' HEAD fi rm -f "$GIT_DIR/MERGE_HEAD" else