git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] git-pull: disallow implicit merging to detached HEAD

From
Jeff King <peff@peff.net>
Date
Jan 15, 2007, 22:25 UTC
Message-ID
<20070115222533.GA12928@coredump.intra.peff.net>
In-Reply-To
<7vk5zo0ws1.fsf@assigned-by-dhcp.cox.net>

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>
---
This is on top of your other patch.
> I think what I sent out was a moral equivalent, but generally
> speaking I do not think we should discard stderr output
> indiscriminatingly.
Agreed.
> I think it makes more sense to say "your HEAD is detached and
> you need to explicitly say which branch you would want to merge
> in" in this case.
Something like this?
 Documentation/git-symbolic-ref.txt |    4 ++++
 git-pull.sh                        |   13 +++++++++++--
 2 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/Documentation/git-symbolic-ref.txt b/Documentation/git-symbolic-ref.txt
index 1e818bb..fec3b4f 100644
--- a/Documentation/git-symbolic-ref.txt
+++ b/Documentation/git-symbolic-ref.txt
@@ -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>
diff --git a/git-pull.sh b/git-pull.sh
index 9592617..3e96569 100755
--- a/git-pull.sh
+++ b/git-pull.sh
@@ -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 "indicate which branch you wish to merge with"
+	     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."
-- 
1.5.0.rc1.gb329-dirty
Previous: Junio C HamanoNext: Jeff King
Message 4 of 7 in “git-fetch while on "(no branch)"”
  1. Andy ParkinsJan 15, 2007
  2. git-{parse-remote,pull}: throw away stderr of git-symbolic-refJeff King, Jan 15, 2007
  3. Junio C HamanoJan 15, 2007
  4. git-pull: disallow implicit merging to detached HEADJeff King, Jan 15, 2007
  5. Jeff KingJan 15, 2007
  6. Junio C HamanoJan 15, 2007
  7. Jeff KingJan 15, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.