From: Junio C Hamano Date: Fri, 8 Jun 2007 09:55:19 +0000 (-0700) Subject: Merge branch 'maint' X-Git-Tag: v1.5.3-rc0~139 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/abc403f58452da667b261274a1091af61dfec35c?ds=inline;hp=-c Merge branch 'maint' * maint: checkout: do not get confused with ambiguous tag/branch names --- abc403f58452da667b261274a1091af61dfec35c diff --combined git-checkout.sh index d561c88dcb,7c5ca3d62f..33f1e87c0c --- a/git-checkout.sh +++ b/git-checkout.sh @@@ -63,12 -63,13 +63,13 @@@ while [ "$#" != "0" ]; d echo "unknown flag $arg" exit 1 fi - new="$rev" new_name="$arg" if git-show-ref --verify --quiet -- "refs/heads/$arg" then + rev=$(git-rev-parse --verify "refs/heads/$arg^0") branch="$arg" fi + new="$rev" elif rev=$(git-rev-parse --verify "$arg^{tree}" 2>/dev/null) then # checking out selected paths from a tree-ish. @@@ -210,7 -211,7 +211,7 @@@ els esac # Match the index to the working tree, and do a three-way. - git diff-files --name-only | git update-index --remove --stdin && + git diff-files --name-only | git update-index --remove --stdin && work=`git write-tree` && git read-tree $v --reset -u $new || exit @@@ -245,7 -246,7 +246,7 @@@ (exit $saved_err) fi -# +# # Switch the HEAD pointer to the new branch if we # checked out a branch head, and remove any potential # old MERGE_HEAD's (subsequent commits will clearly not @@@ -270,7 -271,15 +271,7 @@@ if [ "$?" -eq 0 ]; the 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