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