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

Re: [funny] "git checkout -t origin/xyzzy" seems to misbehave

From: Alex Riesen <hidden>
Date: 2016-06-15 22:45:23

Junio C Hamano, Sun, Sep 21, 2008 10:23:00 +0200:
When you

 * are on a branch "foo" that is not "bar",
 * have "origin/bar",
 * and already have a local branch "bar",

"git checkout -t origin/bar" seems to misbehave.

    $ git clone -s git.junio victim-002
    $ cd victim-002
    $ git branch
    * master
    $ git checkout -t origin/next
    Branch next set up to track remote branch refs/remotes/origin/next.
    Switched to a new branch "next"
    $ git checkout -t origin/master
    fatal: A branch named 'master' already exists.
    $ git branch
      master
    * next
    $ git diff --cached --shortstat
     60 files changed, 2378 insertions(+), 3412 deletions(-)
    $ git diff --cached master
    $ exit

The first "checkout -t" is fine.  The failed one seems to have already
updated the index and the work tree when it notices that it cannot create
a new branch.
Precisely this (branch already exists) case is easy to handle with a
resolve_ref in builtin-checkout.c:switch_branches.

The other errors will still leave index and working tree in this
state: branch.c:create_branch does not cleanup in case of errors,
it just dies.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help