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

[PATCH] branch: do not attempt to track HEAD implicitly

From
Thomas Rast <trast@student.ethz.ch>
Date
Dec 14, 2010, 18:38 UTC
Message-ID
<6ee1f0174b757e25ab873d2d037545ac7db698ee.1292351886.git.trast@student.ethz.ch>

With branch.autosetupmerge=always, 'HEAD' becomes a valid target for branch tracking. This is a bit silly, and in fact the code already guards against it when attempting it explicitly:

  $ git checkout HEAD^0
  $ g branch -t foo
  fatal: Cannot setup tracking information; starting point is not a branch.

Silently drop the HEAD candidate in the implicit (i.e. without -t flag) case, so that the branch starts out without an upstream.

Signed-off-by: Thomas Rast <trast@student.ethz.ch>
---
 branch.c          |    8 ++++++--
 t/t3200-branch.sh |    9 +++++++++
 2 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/branch.c b/branch.c
index 93dc866..19310e4 100644
--- a/branch.c
+++ b/branch.c
@@ -176,8 +176,12 @@ void create_branch(const char *head,
 		break;
 	case 1:
 		/* Unique completion -- good, only if it is a real ref */
-		if (explicit_tracking && !strcmp(real_ref, "HEAD"))
-			die("Cannot setup tracking information; starting point is not a branch.");
+		if (!strcmp(real_ref, "HEAD")) {
+			if (explicit_tracking)
+				die("Cannot setup tracking information; starting point is not a branch.");
+			else
+				real_ref = NULL;
+		}
 		break;
 	default:
 		die("Ambiguous object name: '%s'.", start_name);
diff --git a/t/t3200-branch.sh b/t/t3200-branch.sh
index f308235..0fa5c91 100755
--- a/t/t3200-branch.sh
+++ b/t/t3200-branch.sh
@@ -488,6 +488,15 @@ test_expect_success 'autosetuprebase always on an untracked remote branch' '
 	test "z$(git config branch.myr20.rebase)" = z
 '
 
+test_expect_success 'autosetuprebase always on detached HEAD' '
+	git config branch.autosetupmerge always &&
+	test_when_finished git checkout master &&
+	git checkout HEAD^0 &&
+	git branch my11 &&
+	test -z "$(git config branch.my11.remote)" &&
+	test -z "$(git config branch.my11.merge)"
+'
+
 test_expect_success 'detect misconfigured autosetuprebase (bad value)' '
 	git config branch.autosetuprebase garbage &&
 	test_must_fail git branch
-- 
1.7.3.3.797.g7a32f
Next: Martin von Zweigbergk
Message 1 of 5 in “branch: do not attempt to track HEAD implicitly”
  1. branch: do not attempt to track HEAD implicitlyThomas Rast, Dec 14, 2010
  2. Martin von ZweigbergkDec 15, 2010
  3. Thomas RastDec 15, 2010
  4. Martin von ZweigbergkDec 15, 2010
  5. Junio C HamanoDec 17, 2010

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.