On Thu, Jan 31, 2019 at 12:29 AM Duy Nguyen <pclouds@xxxxxxxxx> wrote: > On Thu, Jan 31, 2019 at 7:50 AM Eric Sunshine <sunshine@xxxxxxxxxxxxxx> wrote: > > On Wed, Jan 30, 2019 at 4:49 AM Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> wrote: > > > +'git switch' [<options>] [--guess] <branch> > > > +'git switch' [<options>] --detach [<start_point>>] > > > +'git switch' [<options>] [[-c|-C|--orphan] <new_branch>] [<start_point>] > > > > What does the third form mean when all optional arguments (that is, > > _all_ arguments) are omitted? > > "git switch" is smart (or too dumb to be clever): > > $ git switch > fatal: nothing to do But does it need to be this way? Does it make a good user-experience? I, personally, find it confusing to see that it can accept no arguments. An alternative, perhaps more consistent with UX elsewhere: $ git switch fatal: missing branch argument or something. > > > +If it turns out whatever you have done is worth keeping, you can > > > +always create a new name for it (without switching away): > > > +------------ > > > +$ git switch -c good-surprises > > > +------------ > > > > I had to go re-read git-branch documentation to understand why you > > recommended "git switch -c <new-branch>" (or even why this mode > > exists) over plain "git branch <new-branch>". I wonder if the > > difference between the two deserves a bit more discussion here and > > above in the description of the -c/-C options. > > There is this bit in git-branch, will that help? > > -- 8< -- > If you are creating a branch that you want to checkout immediately, it is > easier to use the "git switch" command with its `-c` option to create > a branch and check it out with a single command. > -- 8< -- That's pretty reasonable when reading git-branch documentation but doesn't help when reading git-switch documentation. (Also, shouldn't the bit about "want to checkout" be changed to "want to switch to"?) > Otherwise any suggestions are welcome, I guess I could rephrase it a bit like > > -c <new_branch>:: > --create <new_branch>:: > Create a new branch named <new_branch> starting at > <start_point> before switching to the branch. This is similar > to creating a new branch with linkgit:git-branch[1] except > that `git branch` does not switch branches. This is much better. I find, however, that the top-level git-switch "DESCRIPTION" section, which talks about "switching branches" doesn't actually ever explain what it means to "switch" to a branch. Even adding a simple sentence stating that "switching to a branch means that a newly-created commit will be a direct child of the current head of the branch, and that the branch will be updated to point at the new commit" would help cement the meaning of branch switching in the reader's mind (rather than assuming the reader understands that implicitly).