检查远程Git上是否存在本地分支

时间:2015-02-27 15:14:32

标签: git branch

我想通过一行命令查看我新创建的本地分支是否存在于远程控制器上。就像制作允许我输入

的别名或功能一样
git remoteExists <branchName>

现在我手动列出遥控器上的每个分支,并检查我的本地分支是否存在。这并不像我想的那么容易,因为我们的遥控器有数百个分支,许多具有相似的名称。

我打开分支机构经常处理不同的事情,一次可能是6-7,如果我已经完成并推动了分支机构,或者我仍然需要完成它。

我已经搜索并找到了一些方法来做类似的事情,但是许多方法似乎不必要地复杂,有没有更简单的方法来做到这一点?

修改

要清楚我在做什么。我从一个远程分支机构开始,然后关闭它。我正在改变我当地的分支并推动。我不想设置上游分支,因为我不再使用这个分支;处理远程分支的人员将查看我的更改并将它们集成到远程版本中。

这有效:

git diff <branchName> remotes/origin/<branchName>

致命:模棱两可的论点&#rem; / origin / TestReadyBranch&#39;:未知的修订版或路径不在工作树中。 使用&#39; - &#39;将路径与修订分开,如下所示: &#39; git [...] - [...]&#39;

看到这个错误后,我知道分支机构不存在于遥控器上。有更清洁的方法吗?

5 个答案:

答案 0 :(得分:8)

git fetch origin
git branch -r --contains $mybranch

如果您确定来自此特定仓库的任何推送,您可以省略提取。

答案 1 :(得分:2)

要检查您的本地分支是否与上游跟踪分支有关,您可以运行:

git diff @{u}

其中@{u}表示上游分支名称。从git-rev-parse(1)手册页:

  

@ {upstream},例如master @ {upstream},@ {u}

     

后缀@ {upstream}到一个branchname(简短形式   @ {u})指的是分支的分支   由branchname指定设置为在之上构建   (配置branch..remote和   branch..merge)。缺少的branchname默认为   现在的。

这将输出典型的git diff输出,显示本地分支和上游跟踪分支之间的更改。如果您想将此作为shell命令的一部分使用(例如,用于设置提示或其他内容),您可以添加--quiet

git diff --quiet @{u}

如果存在差异,这将返回非零退出代码。 E.g:

git diff --quiet @{u} || echo "You need to push your changes!"

答案 2 :(得分:1)

在您当地的git文件夹中,您可以

git checkout

如果没有相应的远程分支,则没有输出。否则它将打印出本地和远程分支(前方,后方,分支等)之间的关系

注意:这不适用于1.8.3.1,但适用于2.16.2

答案 3 :(得分:0)

如果遥控器上不存在当前分支,则将退出代码设置为2:

git ls-remote --heads --exit-code origin "$(git symbolic-ref --short HEAD)"

然后你可以签入shell:

if [ $? -eq 2 ]

或者在红宝石中:

if $?.exitstatus == 2

或类似于任何其他语言。

答案 4 :(得分:0)

git branch -r | grep -w <branchName>

应该完成这项工作。

如果远程分支存在,则有输出,否则没有。