Thread (2 messages) flat view 2 messages, 2 authors, 2016-06-15

Re: [PATCH] Add function to checkout a branch in git.el

From: Sergei Organov <hidden>
Date: 2016-06-15 22:44:13

Karl Hasselström [off-list ref] writes:
On 2008-02-13 17:30:02 +0100, Karl Hasselström wrote:
quoted
Why the prefix? Wouldn't it be easier to just have one "switch
branch" prompt that would tab complete existing branch names, and

  * if the user enters the name of an existing branch, just switch to
    it;

  * if the user enters a name that's not the name of an existing
    branch, ask for confirmation, and then create the new branch and
    switch to it.
Reading your code a bit more carefully, I realize that my suggestion
doesn't give you the opportunity to base the new branch on anything
but HEAD. So change the second bullet to

  * if the user enters a name that's not the name of an existing
    branch, display a prompt like this

      Creating new branch "foo". Where should it start?

    Tab complete on existing tags and branches, but accept any
    committish. Create the new branch and switch to it.
It still doesn't allow to detach HEAD at arbitrary tag/committish, as
far as I can see.

I believe the interface should be designed more carefully. Here are some
thoughts/suggestions:

1. Let `git-checkout' switch HEAD. It will never create new branches but
   will be able to detach HEAD. Use tab-completion on branch names and
   maybe tags (maybe by inserting tags/ into completion list, and
   switching completion list to tags after tags/ is enterd by user), but
   allow any commitish. Ideally, it will also revert Emacs buffers for
   which working copy files are changed during checkout.

2. Let `git-create-branch' create new branches. It will prompt for a branch
   name, then prompt for starting point with default set to HEAD, and
   create the branch. As it doesn't switch HEAD, it won't touch working
   files.

3. Let `git-branch' create new branch at HEAD and switch to it. This
   will be just a short-cut for common and simple case. Note that this
   will never change working files as newly created branch will match
   HEAD.

4. Reserve C-u prefix for ability to provide arbitrary options to
   underlying GIT commands. For example, it's useful to be able to give
   -m or -f option to "git checkout"; or --track or -f to "git branch".

The "create new branch at arbitrary point and then switch to it" will
then be a two-step operation: either "

((git-create-branch <name> <point>) (git-checkout <name>)

or

((git-checkout <point>) (git-branch <name>))

but that is IMHO reasonable trade-off for interface simplicity, though
yet another function could be defined to do it in one step.

-- Sergei.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help