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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Apr 28, 2025 at 4:12 PM Junio C Hamano <gitster@xxxxxxxxx> wrote:
>
> 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.)

>
> 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.

>  - 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





[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux