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. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html