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

Re: response to "git branch -f foo origin/foo"

From
D. Ben Knoble <ben.knoble@gmail.com>
Date
May 1, 2025, 18:25 UTC
Message-ID
<CALnO6CBR2J8YdGgVLHxxpciAHBe5WjwAb3dRr=aUKU8fzRvzYQ@mail.gmail.com>
In-Reply-To
<xmqq4iy8cagi.fsf@gitster.g>
On Mon, Apr 28, 2025 at 4:12 PM Junio C Hamano <gitster@pobox.com> wrote:
Show 14 quoted lines
>
> When 'X' is a new branch I am creating to automatically (as the
> default for branch.autoSetupMerge is true these days) track the
> corresponding branch at the upstream, this output ...
>
>     $ git branch [-f] X origin/X
>     branch 'X' set up to track 'origin/X'.
>
> ... from the command, with or without -f, makes perfect sense.
>
> It also makes sense if we reset the tip of 'X' to a slightly older
> commit on the branch, i.e. after doing the above, running
>
>     $ git branch -f X origin/X~4

But why not use `git reset --hard origin/X~4` here? (Answering myself: presumably because this version works whatever the current branch is.)

Show 20 quoted lines
>
> does not say anything.  The branch is still set up to track
> origin/X after doing the above two operations.
>
> However, after doing these, and 'X' is _already_ tracking its
> corresponding branch at the upstream, resetting the branch with '-f'
> again will give us the same message as the first one:
>
>     $ git branch -f X origin/X
>     branch 'X' set up to track 'origin/X'.
>
> and I think it is wrong for at least two reasons:
>
>  * Does it make sense to say "set up to track" in this case?  If X
>    used to be set to track nothing or some other branch, and if we
>    changed the tracking information with the command, the existing
>    message may make sense, but otherwise, I would say the current
>    message is useless, and it is unnecessarily frustrating, because
>    those who see the message may start to wonder what it was set to
>    track before, but at that point, that information is long lost.
The other perspective is that
- it's nice to know the tracking is setup; if I'm used to seeing that
message and I don't, I might wonder where the tracking has gone?
- use of -f is enough consent to lose the "what was there before"
Though, it might still be nice to do the following [reordered]
>  - We may want to extend the "branch X set up to track origin/X"
>    message so that the message mentions what X used to track, or the
>    fact that X tracked nothing.

This might be "noisy" for confident users, but seems like a nice QoL improvement to me.

Show 10 quoted lines
>  - We should give another message when "git branch -f X" resets the
>    commit an existing branch X points at.  Unlike "what was X
>    tracking?" that is forever lost (hence the previous suggestion),
>    what X used to point at can be found out as X@{1}, so it is not
>    necessary to give the exact commit, but the fact that the branch
>    existed already may be significant (especially if you habitually
>    use "branch -f X" whether X exists or not).  Taking inspirations
>    from "git checkout -B X origin/X" that says "Switched to and
>    reset branch 'X'", perhaps "Reset branch 'X'" may be a good place
>    to stop.

Didn't I see you recently suggest someone drop the habit of unnecessary -r in rm? [1] :) This seems similar to me: don't use unnecessary -f as a habit. I would personally find it noisy, but again for newer users it may be helpful. I can't judge that well (only that it would lose some "silence means success").

[1]: https://lore.kernel.org/git/xmqqecxk3u5l.fsf@gitster.g/
-- 
D. Ben Knoble
Previous: Junio C HamanoNext: Junio C Hamano
Message 2 of 3 in “response to "git branch -f foo origin/foo"”
  1. Junio C HamanoApr 28, 2025
  2. D. Ben KnobleMay 1, 2025
  3. Junio C HamanoMay 1, 2025

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.