如何区分 git 分支名称和提交哈希?

2024-04-26

我有一个 bash 脚本,它接受分支名称(例如“master”或“feature/foo”)或提交哈希(例如“1234abcd”)的字符串。

我已签出存储库,因此我可以调用 git。

确定字符串是分支名称还是提交哈希的最佳方法是什么?

#!/bin/bash
commit_or_branch="$1"
cd /path/to/my_repo
git fetch
if <is_branch $commit_or_branch>
then
    echo "it's a branch"
else
    echo "it's a commit"
fi

如果你想要一个强大的机制来告诉相对名称(例如,你的 SHA1 可能是一个命名分支后面的一个或多个提交),你可以使用git name-rev来解决它。

例子:

$ git config remote.upstream.url
https://github.com/RobotLocomotion/drake.git

$ git log --oneline -n 5
7530a95 Merge pull request #5743 from soonho-tri/pr-reformat-mathematical_program
ebc8f25 Suppresses console output of speed_bump.obj genrule. (#5726)
d8b9a0b Merge pull request #5735 from david-german-tri/namespaces
79e10e8 Remove redundant 'symbolic::' prefix from mathematical_program code
b68b590 Clean up mathematical_program code by adding using std::*

$ git name-rev HEAD
HEAD master
$ git name-rev 79e10e8
79e10e8 master^2
$ git name-rev HEAD~20
HEAD~20 remotes/origin/issue/5646_return_binding~3

参考:Git 提示(旧提交) https://github.com/git-tips/tips/tree/39d1012fc9652aa9853d58d0fd1086070d82e4f7#check-if-the-change-was-a-part-of-a-release

更新:正如@kporter提到的,还有--name-only标志(截至 2020 年 4 月 21 日的新提交):

$ git name-rev HEAD
HEAD tags/last_sha_with_original_matlab~313
$ git name-rev --name-only HEAD~20
tags/last_sha_with_original_matlab~333

命令行参考:git name-rev https://git-scm.com/docs/git-name-rev

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何区分 git 分支名称和提交哈希? 的相关文章

  • git clean -ndX 不会删除目录

    With gitignore foo 和一个 git 存储库 quux quux foo quux foo bar quux foo bar baz As foo被忽略 git 假设工作目录是干净的 git status On branch
  • Git 与 master 合并,无需签出 master

    每次我需要的时候merge develop with master I do git checkout master git merge develop 有时我忘记切换出去master 因此 我在运行时错误地更改了代码master 它可能会
  • 错误:获取远程存储库“origin”时出错,返回状态代码-1:

    我在 Windows 上运行 Jenkins 当我尝试通过 jenkins 构建我的项目时 出现以下错误 git exe c core askpass true fetch tags progress
  • 添加和提交文件后Git推送不起作用

    I m new to Github and Git tried to use gitbash on Windows After adding and committing files If I add the git push cmd Th
  • git push origin master 失败

    我正在尝试将现有文件夹上传到 gitHub 按照说明 我在 Windows 中输入了以下内容 git remote add origin email protected cdn cgi l email protection myname m
  • Bash 脚本:语法错误:意外的文件结尾[重复]

    这个问题在这里已经有答案了 我有以下文件 并且该文件上有 chmod a x 当我尝试运行它时 出现第 75 行 语法错误 意外的文件结尾 我的脚本有什么错误 我需要做什么来修复它 bin sh log directory for ascp
  • 没有共同的参考文献,也没有指定;什么也不做

    我有一个本地 git 项目 我想将其添加到 gitolite 中 显然这很难 所以我放弃了这个想法 我创建了一个新的 gitolite 存储库 将其添加到 gitolite admin conf gitolite conf 并提交并推送更改
  • 使用与后期步骤中的 Shell 脚本中的克隆相同的 http git 凭据

    我想要自动化我们的发布过程 并且我有一个 Maven 项目的以下 Jenkins 构建作业 使用配置的 Jenkins 凭证 用户名 密码 克隆 Git 存储库 执行一些 Maven 命令以进行构建 配置一个后步骤来执行一些额外的 Git
  • 在docker镜像中运行多个脚本

    您好 我想知道是否可以在 docker 容器启动时自动同时运行两个脚本 第一个脚本必须运行客户端应用程序 第二个脚本必须运行服务器应用程序作为后台 You can use CMD在你的Dockerfile https docs docker
  • 尝试 SSH 时设备的 ioctl 不合适

    我正在尝试通过 SSH 连接几台服务器并尝试获取sudo l每个服务器的输出 下面是我正在执行的脚本 bin bash serverlist tmp servers while IFS read r server netgroup user
  • 获取引用而不下载对象[重复]

    这个问题在这里已经有答案了 我想检查 origin master 是否与我的 HEAD 不同 I do not想要git fetch 因为它可能非常昂贵 我滥用 git 的方式使得成本高得令人望而却步 任何允许我从远程获取提交列表或顶部提交
  • 如何使用 git-svn 使 svn:external 保持最新?

    将我的存储库视为 SVN 存储库 我得到 svn co http myrepo foo trunk foo foo bar baz gt http myrepo baz trunk 将其视为 Git 存储库 我得到 git svn clon
  • 使用 shell 脚本在 docker 容器内运行脚本

    我正在尝试创建一个 shell 脚本来设置 docker 容器 我的脚本文件如下所示 bin bash docker run t i p 5902 5902 name mycontainer privileged myImage new b
  • 如何在 Bash 中将字符串转换为小写

    有办法进去吗bash questions tagged bash将字符串转换为小写字符串 例如 如果我有 a Hi all 我想将其转换为 hi all 有多种方法 POSIX标准 https en m wikipedia org wiki
  • Jenkins 多分支管道 - 在分支中配置属性?

    我们已经使用 Jenkins 多分支管道插件成功设置了构建管道 该插件在大多数情况下都运行良好 但是我们遇到了一个困扰我们的问题 Jenkinsfile包含一组属性 这些属性也显示在 UI 中 但如何为各个分支设置默认值 这就是我们的属性定
  • 如何从 C 文件更改终端中的目录

    如何从 C 程序更改将在终端上生效的目录 实际上不要告诉 system 函数或 chdir 函数 这些仅适用于 C 中的进程或子 shell 假设我正在从 bash shell 执行一个 C 程序 其进程 ID 为 10223 那么 我可以
  • 如何摆脱每个新终端会话上运行的某些内容?

    我正在使用狮子 我在每个新的终端会话上都会输出一个错误 bash rvm add to path command not found 这是一个几乎全新的用户帐户 RVM 安装在计算机上的另一个帐户上 bashrc 和 bash profil
  • 如何从脚本向 sudo 提供密码?

    请注意 这是在我的本地计算机上运行的来宾虚拟机 VBox 我不担心安全性 我正在编写一个将在 Linux Ubuntu VM 上执行的脚本myuser用户 该脚本将在下面创建一个非常大的目录树 etc myapp 目前我必须手动完成所有这些
  • bash、zsh :声明 [*] (天哪)

    我正在使用具有以下语法的 bash 脚本 declare a THIS 这在 zsh 中似乎是非法的 我收到 未找到匹配项 THIS 错误 谁能帮我把它翻译成 zsh 吗 另外 什么是 语法是什么意思 我知道我们正在声明一个数组 但为什么要
  • -bash: gulp: 在 Mac 中找不到命令

    我尝试在 mac 中安装 gulp 如下所示 Is iMac itop npm root Users itop node modules Is iMac itop npm config set prefix usr local Is iMa

随机推荐

  • 以编程方式将网页保存到静态 HTML 文件的最佳方法

    我做的研究越多 前景就越黯淡 我正在尝试使用 Python 进行平面保存或静态保存网页 这意味着将所有样式合并到内联属性 并将所有链接更改为绝对 URL 我尝试过几乎所有免费的转换网站 api 甚至 github 上的库 没有一个是那么令人
  • URL 扩展隐藏:重写与重定向

    我已经阅读了很多问题和答案 但我无法决定哪一个更好或如何使用这些扩展隐藏方式的组合 我想要的是就是有一个像这样的url重写堆栈溢出 那么我还应该做什么才能遵守这些规则 url example com file anyEXT show con
  • 从哪里可以获得 Microsoft.DirectX.dll?

    我不知道从哪里得到它 只是微软的 SDK 吗 如果是 如何将其添加到我的项目 Visual Studios 2010 C 中 托管 DirectX 包装器已过时 不再包含在 DirectX SDK 中 最后一个版本是 2010 年 2 月发
  • null对象的hashcode是如何计算的

    由于 HashMap 和 HashSet 允许空对象 那么这些 空 对象的哈希值是多少 java中如何计算 处理它 openJDK 内置的 HashMap 只是将空引用放入数组中用于保存条目的第一个存储桶中 409 private V pu
  • java中引用和对象有什么区别? [复制]

    这个问题在这里已经有答案了 我有类 GUI 所以我可以创建这样的对象 GUI g1 new GUI 和一个像这样的引用变量 GUI g2 现在据我所知 g2 是一个引用变量 它引用 GUI 类 而 g1 是 GUI 类的对象 g1和g2有什
  • 用户名作为路径

    我希望将用户名作为 URL 的一部分 例如mysite com 用户名 这应该重定向到用户配置文件 我用简介2 http drupal org project profile2 and Pathauto http drupal org pr
  • 未选中选项卡下划线的 TabLayout 颜色

    在此图中 在选项卡布局中 选定的选项卡栏下划线颜色为紫色 并且文本 我搜索未选择的标签栏 但找不到未选择的标签栏下划线 我想在选择某个选项卡时更改颜色 更改未选择的选项卡下划线颜色 如果你知道这件事 你会帮助我吗 在drawable文件夹中
  • React Hook“useState”在函数“setResults”中调用,该函数既不是 React 函数组件,也不是自定义 React Hook 函数

    我试图在一个功能组件中进行 API 调用 该组件是一个反应钩子 并根据结果重新渲染组件的内容 这是代码 调用 API 的组件 function IntegrationDownshift render
  • Delphi:MDI应用程序中的最大化子窗体

    如何最大化仅适合客户区而不适合整个父窗口的子窗口 我不希望子窗口在父窗口的主菜单或其他控件下消失 我有这个代码 procedure WMSIZE var Msg TMessage message WM SIZE procedure TFor
  • 使用记忆化与不使用记忆化的递归

    我在学校做的作业是用递归计算加泰罗尼亚数 第一个没有记忆 def catalan rec n res 0 if n 0 return 1 else for i in range n res catalan rec i catalan rec
  • 如何链接到grafana表中的外部站点

    如何创建包含外部站点超链接的单元格列 我可以嵌入文本并通过数据源传递它 不幸的是 grafana 不会将纯文本转换为超链接 例如 我可以使用以下文本创建一个单元格 https www google com search q hot dogs
  • 未捕获错误:INVALID_STATE_ERR:带有 webkitEnterFullScreen 的 DOM 异常 11

    document ready function var url video mp4 var video document createElement video video attr width 300 video attr height
  • 某些操作不会调用自定义 ContactsDirectoryProvider

    我已经实现了自定义 ContactsDirectoryProvider 当联系人或拨号器应用程序使用以下形式的 URI 搜索联系人时 它可以正常工作内容 com android contacts data phones filter 但是
  • Camel Rest URI 使用后缀

    所以我有一个使用 Camel 的 REST Web 服务 它工作得很好 只是如果我用后缀调用我的 URI 我会得到相同的响应 而不是 404 休息配置 restConfiguration component restlet bindingM
  • npm install 不起作用(没有错误),但 npm install 起作用

    关于 Node 和 npm 的菜鸟问题 我有一个 package json 文件 其中包含我想要使用 npm install 进行安装的依赖项列表 当我运行命令时 没有任何反应 我什至没有收到错误 什么也没有 但如果我尝试从列表中安装单个包
  • 如何避免org.springframework.transaction.UnexpectedRollbackException?

    当一个方法被 Transactional注解并且出现运行时异常时 spring会吃掉该异常并抛出 org springframework transaction UnexpectedRollbackException Transaction
  • 选择 data.table 中的列子集

    我想打印数据表的所有列dt除了其中一位名叫V3但不想通过数字而是通过名称来引用它 这是我的代码 dt data table matrix sample c 0 1 5 rep T 50 10 dt 3 with FALSE Is this
  • 有没有原生 DLL 导出函数查看器? [复制]

    这个问题在这里已经有答案了 是否有免费的本机 Windows DLL 导出函数查看器 它显示函数名称及其参数列表 dumpbin从 Visual Studio 命令提示符处 dumpbin exports csp dll 输出示例 Micr
  • 删除在网格 ExtJS 4 中选择特定行的功能

    我必须删除在网格中选择某些行的功能 我使用复选框模型 selModel Ext create Ext selection CheckboxModel mode SIMPLE 要禁用选择 我使用 beforeselect 事件 befores
  • 如何区分 git 分支名称和提交哈希?

    我有一个 bash 脚本 它接受分支名称 例如 master 或 feature foo 或提交哈希 例如 1234abcd 的字符串 我已签出存储库 因此我可以调用 git 确定字符串是分支名称还是提交哈希的最佳方法是什么 bin bas