检查本地分支是否存在于远程 Git
Check If Local Branch Exists On Remote Git
我想通过一行命令查看远程上是否存在我新创建的本地分支之一。就像创建一个允许我输入
的别名或函数
git remoteExists <branchName>
现在我手动列出远程上的每个分支并检查我的本地分支是否在那里。这并不像我想的那么容易,因为我们的遥控器有数百个分支,其中许多分支名称相似。
我经常切换分支来处理不同的事情,一次可能有 6-7 个,很难记住我是否已经完成并推送了一个分支,或者我是否还需要完成它。
我已经搜索并找到了一些方法来做类似的事情,但很多似乎不必要地复杂,有没有更简单的方法来做到这一点?
编辑
明确我在做什么。我从一个远程分支开始,并从中创建一个本地分支。我正在对本地分支机构进行更改并进行推送。我不想设置上游分支,因为我不会再使用这个分支;处理远程分支的人将查看我的更改并将它们集成到远程版本中。
这个有效:
git diff <branchName> remotes/origin/<branchName>
致命:参数不明确'remotes/origin/TestReadyBranch':未知修订版或路径不在工作树中。
使用 '--' 将路径与修订分开,如下所示:
'git [...] -- [...]'
看到这个错误我就知道远程上不存在这个分支。有更简洁的方法吗?
要检查您的本地分支与上游跟踪分支是否有变化,您可以运行:
git diff @{u}
其中@{u}
指的是上游分支名称。来自 git-rev-parse(1)
手册页:
@{upstream}, e.g. master@{upstream}, @{u}
The suffix @{upstream} to a branchname (short form
@{u}) refers to the branch that the branch
specified by branchname is set to build on top of
(configured with branch..remote and
branch..merge). A missing branchname defaults to the
current one.
这将输出典型的 git diff
输出,显示本地分支和上游跟踪分支之间的变化。如果你想将其用作 shell 命令的一部分(例如,用于设置提示符或其他内容),你可以添加 --quiet
:
git diff --quiet @{u}
如果存在差异,这将 return 一个非零退出代码。例如:
git diff --quiet @{u} || echo "You need to push your changes!"
git fetch origin
git branch -r --contains $mybranch
如果您确定任何推送都来自这个特定的回购协议,您可以省略获取。
如果远程上不存在当前分支,这会将退出代码设置为 2:
git ls-remote --heads --exit-code origin "$(git symbolic-ref --short HEAD)"
那你可以签到shell:
if [ $? -eq 2 ]
或在ruby:
if $?.exitstatus == 2
或类似的任何其他语言。
在您的本地 git 文件夹中,您可以执行
git checkout
如果没有对应的远程分支,则没有输出。否则它会打印出本地和远程分支之间的关系(提前,落后,发散等)
注意:这不适用于 1.8.3.1,但适用于 2.16.2
我实际上写了一个小工具来查看我所有回购协议的状态。您可以在 github 上找到它。如果分支的颜色显示为白色,则表示没有远程分支。
- 白色:本地没有远程
- 绿色:本地与远程相同
- 红色:本地与远程发生分歧
- 紫色:本地领先于远程(有利于推送)
- 黄色:本地在远程后面(有利于合并)
git branch -r | grep -w <branchName>
应该完成这项工作。
如果远程分支存在,则有输出,否则没有。
我想通过一行命令查看远程上是否存在我新创建的本地分支之一。就像创建一个允许我输入
的别名或函数git remoteExists <branchName>
现在我手动列出远程上的每个分支并检查我的本地分支是否在那里。这并不像我想的那么容易,因为我们的遥控器有数百个分支,其中许多分支名称相似。
我经常切换分支来处理不同的事情,一次可能有 6-7 个,很难记住我是否已经完成并推送了一个分支,或者我是否还需要完成它。
我已经搜索并找到了一些方法来做类似的事情,但很多似乎不必要地复杂,有没有更简单的方法来做到这一点?
编辑
明确我在做什么。我从一个远程分支开始,并从中创建一个本地分支。我正在对本地分支机构进行更改并进行推送。我不想设置上游分支,因为我不会再使用这个分支;处理远程分支的人将查看我的更改并将它们集成到远程版本中。
这个有效:
git diff <branchName> remotes/origin/<branchName>
致命:参数不明确'remotes/origin/TestReadyBranch':未知修订版或路径不在工作树中。 使用 '--' 将路径与修订分开,如下所示: 'git [...] -- [...]'
看到这个错误我就知道远程上不存在这个分支。有更简洁的方法吗?
要检查您的本地分支与上游跟踪分支是否有变化,您可以运行:
git diff @{u}
其中@{u}
指的是上游分支名称。来自 git-rev-parse(1)
手册页:
@{upstream}, e.g. master@{upstream}, @{u}
The suffix @{upstream} to a branchname (short form @{u}) refers to the branch that the branch specified by branchname is set to build on top of (configured with branch..remote and branch..merge). A missing branchname defaults to the current one.
这将输出典型的 git diff
输出,显示本地分支和上游跟踪分支之间的变化。如果你想将其用作 shell 命令的一部分(例如,用于设置提示符或其他内容),你可以添加 --quiet
:
git diff --quiet @{u}
如果存在差异,这将 return 一个非零退出代码。例如:
git diff --quiet @{u} || echo "You need to push your changes!"
git fetch origin
git branch -r --contains $mybranch
如果您确定任何推送都来自这个特定的回购协议,您可以省略获取。
如果远程上不存在当前分支,这会将退出代码设置为 2:
git ls-remote --heads --exit-code origin "$(git symbolic-ref --short HEAD)"
那你可以签到shell:
if [ $? -eq 2 ]
或在ruby:
if $?.exitstatus == 2
或类似的任何其他语言。
在您的本地 git 文件夹中,您可以执行
git checkout
如果没有对应的远程分支,则没有输出。否则它会打印出本地和远程分支之间的关系(提前,落后,发散等)
注意:这不适用于 1.8.3.1,但适用于 2.16.2
我实际上写了一个小工具来查看我所有回购协议的状态。您可以在 github 上找到它。如果分支的颜色显示为白色,则表示没有远程分支。
- 白色:本地没有远程
- 绿色:本地与远程相同
- 红色:本地与远程发生分歧
- 紫色:本地领先于远程(有利于推送)
- 黄色:本地在远程后面(有利于合并)
git branch -r | grep -w <branchName>
应该完成这项工作。
如果远程分支存在,则有输出,否则没有。