git创建或更新分支(签出时)——单个命令

git创建或更新分支(签出时)——单个命令,git,git-branch,git-checkout,Git,Git Branch,Git Checkout,我想创建一个新分支并签出它。但是,如果我正在创建的分支名称已经存在,我不想出现错误,我只想让git将已经存在的分支更新到我要签出它的位置 以下是我正在做的: $ git branch develop * foobar $ git checkout -b develop origin/develop fatal: A branch named 'develop' already exists. $ git update-ref refs/heads/develop origin/develop

我想创建一个新分支并签出它。但是,如果我正在创建的分支名称已经存在,我不想出现错误,我只想让git将已经存在的分支更新到我要签出它的位置

以下是我正在做的:

$ git branch
  develop
* foobar
$ git checkout -b develop origin/develop
fatal: A branch named 'develop' already exists.
$ git update-ref refs/heads/develop origin/develop
$ git checkout develop
Switched to branch 'develop'
$ git branch
* develop
  foobar
$
以下是我想要的:

$ git checkout --update-if-exists -b develop origin/develop
Switched to branch 'develop'
$ git branch
* develop
  foobar
$

我不知道有哪一个git命令可以让您这样做,但这里有一个bash脚本(我认为)可以满足您的需要:

#!/bin/bash
git fetch origin "$1"
if [[ 0 != $? ]]; then
  git branch "$1"
fi
git checkout "$1"
编辑:(评论后)

我明白了。当然,我们可以这样修改脚本:

#!/bin/bash
git branch "$1"
if [[ 0 != $? ]]; then
  git update-ref "refs/heads/$1" "origin/$1"
fi
git checkout "$1"
#!/bin/bash
git branch "$1" 2>/dev/null
if [[ 0 != $? ]]; then
  git update-ref "refs/heads/$1" "origin/$1"
fi
git checkout "$1"
而且,如果您不想在第一个命令失败时显示错误,可以像下面这样使这些错误静音:

#!/bin/bash
git branch "$1"
if [[ 0 != $? ]]; then
  git update-ref "refs/heads/$1" "origin/$1"
fi
git checkout "$1"
#!/bin/bash
git branch "$1" 2>/dev/null
if [[ 0 != $? ]]; then
  git update-ref "refs/heads/$1" "origin/$1"
fi
git checkout "$1"

我认为那行不通。检查分支是否存在于源中。我想知道分支机构是否存在于本地。在这之后,我不想简单地在本地签出分支,我想更新它以指向origin的提交。