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.