git checkout远程分支,如果存在,则创建它



我不是第一个问这个问题的人,但是我在找到正确的搜索结果时遇到了麻烦。这些术语的含义太宽泛了。

最后,我想在远程分支中添加一些内容。远端分支可能不存在。首先我克隆远程repo,我只有默认的本地分支。然后:

到目前为止,我有:

git checkout -b ${BRANCHNAME} origin/${BRANCHNAME} --track || git checkout -b ${BRANCHNAME}
git add ...
git commit -m "new stuff"
git push origin ${BRANCHNAME}

有更好的方法来做第一行吗?

所有分支必须有一个起始点;你的序列:

  • 尝试在原点/B创建分支B,原点/B为上游;
  • 如果失败,在HEAD创建分支B,没有上游

可以重写为:

if start=$(git rev-parse refs/remotes/origin/${BRANCHNAME}); then
extra="--track origin/${BRANCHNAME}"
else
start=HEAD
extra=
fi
git checkout -b ${BRANCHNAME} ${start} $extra

(或git switch -c作为最终命令的等效值)。但是我不认为它可以比你已经有的两步||变体更短。

使用if ... then ... else ... fi序列,您可以将--quiet --verify添加到rev-parse步骤并避免生成错误消息,当然您也可以根据需要设置额外的变量,以便您可以进行或早期编码未来的测试(例如,决定是否要使用git push -u)。

最新更新