Re: PATCH: improve git switch documentation

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

 



On 09/07/2021 19:41, Felipe Contreras wrote:
Martin wrote:
Well, that is the question as what the action is perceived.
I think the example is wrong, rather than the command.

-c / -C /-n / -N always *c*reate an *n*ew branch. (create and new really
are the same thing here)

But if the branch name Foo, is already used?
Well, it will still be a *new* branch being *created*.
To do that it has to remove the name from the old branch. (effectively
removing the old branch).

But it's not removing the name, it's merely changing the head.

I don't particularly mind having -C or -N, I just would not use them
because I like to be explicit. I don't use --new for something that
already exists.

But that comes down to the "what is a branch" discussion.

It is not creating a new branchname. But it is creating a new branch. And then the branchname refers to that new branch.

It changes head, base, and the entire content. That effectively makes it new.

If you have a 10 year old car that you nicknamed "speedy", and I come along and I replace every part (every screw, every whatever...) with a brand new part, would you still call the result a 10 year old car (even if (or just because) you still use the nickname) ?


Using "reset", it's similar. Except that human language is slopy.
If I play WOW, and I reset the game. Actually that is already wrong. I do not reset the game. It is still the same code, the same images.... I do reset my session or status. And after that, I will be in a new session, or have a new status.

- "creating" the branch is "setting (up) the branch"
- "re-setting" is doing doing this (creation) again.


Nope it does not go away.

All this has done, is that it no longer is a "force" command.
So the last bit of warning has just gone.

And it still needs to be documented inside the "git switch" doc, rather
than forwarding the user do yet another doc.

Yes, but as I said: the documentation writes itself.

   -n <branch>, --new <branch>

     Creates a new branch.

   --reset <branch>

     Resets the branch to <head>.

And that still leaves it to the user to connect the dots, and come to the conclusion that the old branch is no longer holding his valued commits.

We don't ask the user to go make this sort of "connecting the dots", when he uses force to override changes in his worktree.

Why?



So, I still ask:
- If "--force" to overwrite the work tree can clearly state that change
to files will be "thrown away".
- Then why can "force" re-using an existing branch name not do the same?

Because we would be forcing two things now.

Which 2 things?

The worktree overwriting is *not* forced by -C

  git switch -C b1 b2
  git checkout -B b1 b2

both give an error if the worktree has changed files.

This is only about what happens to the branch.

I.e we force the branchname to point to our new branch.
And that means the branchname no longe points to the old branch, and the old branch therefore is removed.



I'd rather not overload
concepts.

Sorry the concepts are there by whatever the implementation does.

Documenting them does not overload concepts. If they indeed already are overloaded, then documentation does not change that.

Btw, not sure what is overloaded here?








[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