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

Re: [Question] Fetching a new branch from remote

From
Junio C Hamano <junkio@cox.net>
Date
Dec 1, 2005, 20:09 UTC
Message-ID
<7vk6eoinqa.fsf@assigned-by-dhcp.cox.net>
In-Reply-To
<20051128163356.GA8300@hpsvcnb.fc.hp.com>
Carl Baldwin <cnb@fc.hp.com> writes:
Show 9 quoted lines
> I would expect this to do it:
>
> % git fetch -f <url> new-branch
>
> But, it doesn't.
>
> Actually, I just noticed that this accomplishes the desired result...
>
> % git fetch <url> new-branch:new-branch

First, '-f' means "allow overriding the fast-forward check when updating an existing branch". This can be done per refspec by saying "+rbranch:lbranch" but if you are fetching more than one remote branches at once (especially through "remotes" shorthand) the option can be used to allow override of all of them.

A single token <refspec> defaults to "<refspec>:" (meaning, "fetch but do not muck with our branches") is deliberate. When I get a pull request "please pull from git://u/r/l/ send2junio branch", I do not "git pull git://u/r/l/ send2junio" right away, but do "git fetch git://u/r/l/ send2junio" and inspect FETCH_HEAD with various combinations of "git diff master..FETCH_HEAD" and friends. I do _not_ want it to create send2junio branch in my repository with that. Also "git pull git://u/r/l/ send2junio" would internally run "git fetch git://u/r/l/ send2junio" and then runs merge, and I do not want that to create send2junio branch in my repository either. The latter could be prevented by adding an extra flag to git-fetch to tell it not to default a single token <refspec> to "<refspec>:<refspec>" and pass that flag from git-pull, though.

I just found out that the documentation for '-f' flag is simply missing. I'd propose to add the following. Thanks for noticing.

-- >8 --
diff --git a/Documentation/fetch-options.txt b/Documentation/fetch-options.txt
index a25d04a..200c9b2 100644
--- a/Documentation/fetch-options.txt
+++ b/Documentation/fetch-options.txt
@@ -4,6 +4,11 @@
 	option old data in `.git/FETCH_HEAD` will be overwritten.
 
 -f, \--force::
+	When `git-fetch` is used with `<rbranch>:<lbranch>`
+	refspec, it refuses to update the local branch
+	`<lbranch>` unless the remote branch `<rbranch>` it
+	fetches is a descendant of `<lbranch>`.  This option
+	overrides that check.
 
 -t, \--tags::
 	By default, the git core utilities will not fetch and store
Previous: Carl BaldwinNext: Jon Loeliger
Message 2 of 4 in “[Question] Fetching a new branch from remote”
  1. Carl BaldwinNov 28, 2005
  2. Junio C HamanoDec 1, 2005
  3. Jon LoeligerDec 1, 2005
  4. Carl BaldwinDec 2, 2005

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.