git-pull: disallow implicit merging to detached HEAD

Instead, we complain to the user and suggest that they explicitly
specify the remote and branch. We depend on the exit status of
git-symbolic-ref, so let's go ahead and document that.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Jeff King 2007-01-15 17:25:33 -05:00 committed by Junio C Hamano
parent a0f4280f9e
commit a74b1706c8
2 changed files with 15 additions and 2 deletions

View file

@ -44,6 +44,10 @@ cumbersome. On some platforms, `ln -sf` does not even work as
advertised (horrors). Therefore symbolic links are now deprecated
and symbolic refs are used by default.
git-symbolic-ref will exit with status 0 if the contents of the
symbolic ref were printed correctly, with status 1 if the requested
name is not a symbolic ref, or 128 if another error occurs.
Author
------
Written by Junio C Hamano <junkio@cox.net>

View file

@ -83,8 +83,17 @@ merge_head=$(sed -e '/ not-for-merge /d' \
case "$merge_head" in
'')
curr_branch=$(git-symbolic-ref HEAD | \
sed -e 's|^refs/heads/||')
curr_branch=$(git-symbolic-ref -q HEAD)
case $? in
0) ;;
1) echo >&2 "You are not currently on a branch; you must explicitly"
echo >&2 "specify which branch you wish to merge:"
echo >&2 " git pull <remote> <branch>"
exit 1;;
*) exit $?;;
esac
curr_branch=${curr_branch#refs/heads/}
echo >&2 "Warning: No merge candidate found because value of config option
\"branch.${curr_branch}.merge\" does not match any remote branch fetched."
echo >&2 "No changes."