Re: [PATCH v3 10/21] checkout: split part of it to new command 'switch'
- From
- Phillip Wood <phillip.wood123@gmail.com>
- Date
- Mar 11, 2019, 17:03 UTC
- Message-ID
- <f63a7ae7-0a08-02f2-23e6-4389d8fda729@gmail.com>
- In-Reply-To
- <CACsJy8DrrEg++wUszU2B1zJ_gvO1WC8MXXa53ZpMnObgqy=AeQ@mail.gmail.com>
Hi Duy
On 11/03/2019 11:47, Duy Nguyen wrote:
Show 30 quoted lines
> On Mon, Mar 11, 2019 at 6:16 PM Phillip Wood <phillip.wood123@gmail.com> wrote: >> >> >> Hi Duy >> >> On 08/03/2019 09:57, Nguyễn Thái Ngọc Duy wrote: >>> "git checkout" doing too many things is a source of confusion for many >>> users (and it even bites old timers sometimes). To remedy that, the >>> command will be split into two new ones: switch and >>> something-to-checkout-paths. >> >> I think this is a good idea, thanks for working on it. I wonder if it >> would be a good idea to have the new command refuse to checkout a new >> branch if there is a cherry-pick/revert/merge/rebase in progress (with >> an option to override the check) as switching branches in the middle of >> one of those is likely to be confusing to users (if I do it it is >> normally because I've forgotten that I've not run 'git whatever >> --continue'). > > Interesting. I think this would be a good default if we have an escape > hatch (which could even come later). I often wander off to some other > branch and go back. But then half the time I end up forgetting I'm in > a middle of something and just "git rebase --quit" :P > > Of course with git-stash (*) and git-worktree, I guess there's little > reason to just switch away from a something-in-progress worktree. I'll > try to implement this in the next round, unless someone objects. > > (*) I hope git-stash remembers and restores "something-in-progress" > status. Dunno. Never used it much.
I don't think it does. For rebase it's non trivial as it needs to remember the refs under refs/rewritten and stop gc from collecting any of them or the original head (in theory the todo list can contain commits that the user has added from other branches as well so they'd also need to be protected from gc). For cherry-pick there are gc issues as well.
Best Wishes
Phillip
Show 37 quoted lines
> >>> +-C <new-branch>:: >>> +--force-create <new-branch>:: >>> + Similar to `--create` except that if `<new-branch>` already >>> + exists, it will be reset to `<start-point>`. This is a >>> + convenient shortcut for: >> >> If we're renaming the options to be more meaningful then maybe we should >> consider a different name for this one - it has nothing to do with >> creating a branch. Maybe --reset or --update? > > -C can also create a new branch like -c though. --reset or --update > does not convey that (and --update sounds a bit too safe). Another > option is --recreate. > >>> +-f:: >>> +--force:: >>> + Proceed even if the index or the working tree differs from >>> + HEAD. Both the index and working tree are restored to match >>> + the switching target. This is used to throw away local >>> + changes. >> >> I'd always thought that --force meant "throw away my local changes if >> they conflict with the new branch" not "throw them away regardless" >> (which is better as it is deterministic). Maybe we can come up with a >> clearer name here --discard-changes? At the moment --force does not >> throw away conflicts properly (see the script below in my comments about >> --merge). > > Yeah if you want to redefine --force, now is a very good time. > Personally I'd rather have separate options than the "one catch all" > --force (or worse, multiple of --force). I'll leave this for the > community to decide. > > Adding Elijah too. He also had some concern about "git restore > --force". Maybe he's interested in this as well. >