查找给定 git 提交是否在标记版本中的最佳方法是什么

2023-12-14

处理修复时的一个常见问题是确定给定的修复已应用于哪些版本,即“此修复是否在版本 X 中”。 git 中检查哪些标记版本包含给定提交 ID 的最佳方法是什么?

使用 gitk 手动观察复杂合并模式中的提交非常困难。

到目前为止,我们能想到的最好的解决方案是使用 git-cherry:

git-cherry -v $TAG $COMMIT $COMMIT^

看看它是否出现一个-。有没有更好的办法?


事实上,这很好而且很容易做到,只需使用以下命令:

git tag --contains f414f31

这将列出所有标签f414f31是标签的祖先之一,或者标签本身指向该提交。

这对于查找哪些版本特别有用git包含一个特定的功能:)


Update:

回答下面评论中的进一步问题:

有没有简单的方法可以找出可能已应用于单独分支的所有等效提交?

您可以使用以下命令找到提交引入的补丁的哈希值git patch-id- 这就是命令git cherry, git rebase等用于查找提交是否已被精心挑选。因此,如果您想查找是否引入了更改f414f31也是由分支上的提交引入的foo,你总是可以使用一个简短的 shell 脚本,例如:

patch_id () {
    git show $1 | git patch-id | cut -d ' ' -f1
}

P=$(patch_id f414f31)

git rev-list foo | while read C
do
    P2=$(patch_id $C)
    if [ x$P = x$P2 ]
    then
        echo "Also introduced by commit $C"
    fi
done

如果你想查看所有分支,你可以替换foo with --all. Jefromi下面的评论提出了一些其他的改进,例如你可以添加一个break如果您想停止查找第一个匹配项(如果您只搜索单个分支,则这是明智的),或者使用以下命令排除原始提交的所有祖先git rev-list foo ^f414f31反而。

Jefromi 的评论也提醒我应该对这种方法多说一些。这的文档git patch-id解释说生成的 ID 是“相当稳定的”——行号和空格可以更改而不影响 ID,但是如果您必须在cherry-pick 或 rebase 期间解决任何冲突,则最终可能会更改补丁的文本。在这种情况下,这将找不到提交。

我相信你也可以通过调用来做到这一点git cherry不知怎的,但我永远记不起争论的方向……;)

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

查找给定 git 提交是否在标记版本中的最佳方法是什么 的相关文章

  • git:更改样式(空白)而不更改所有权/责任?

    我们有一个庞大的 古老的代码库 需要大量的清理 我们一直都有编码标准 每个人都试图遵循它们 但它们没有得到执行 因此随着时间的推移 出现了很多违规行为 其中许多只是空格问题 例如使用制表符而不是空格 或者使用制表符代替空格 不应有任何空格
  • 如何在一台电脑上拥有2个git用户?

    我想练习使用 GitHub 做拉取请求并学习如何观看git 差异不同用户之间 如何在 macOS 的终端上设置另一个用户帐户来执行此操作 如何在用户之间切换 充当第二用户有三个方面 1 GitHub账户 要以其他用户身份使用 GitHub
  • 通过 http 的私有 git 存储库

    你能推荐任何简单的解决方案来设置可通过http s cleutus建议的 访问的git存储库吗 我有自己的 http 服务器 我想用它来托管一些小型私人项目 在家里我可以通过 ssh 连接 但在工作中防火墙阻止我这样做 有没有免费的方法来设
  • 如何让别名在 .gitconfig 中工作?

    Github http github com guides git cheat sheet对于全局 git 配置有以下建议 gitconfig alias Is this only a comment in gitconfig gb git
  • SourceTree 中通过 textconv 自定义差异

    我正在尝试比较和合并 SourceTree 中的 MySQL WorkBench 文件 为此 我创建了一个小型 shell 脚本 用于提取 mwb 文件的内容 并从其中的 XML 文件中删除一些无用的计数器 然后我将此行添加到项目根目录中的
  • Visual Studio Code 无法检测已安装的 git 并且“启动 git 时出错:文件名或扩展名太长”。

    我已经查看了大多数描述标题上的第一个错误的帖子 Visual Studio Code 无法检测已安装的 git 尽管如此 我相信第二个错误 启动 git 时出错 文件名或扩展名太长 生成第一个 你可以帮帮我吗 Git 在使用 Git Bas
  • Git 每次提交和拉取时都要求输入密码

    我正在使用带有 Git 扩展的 Visual Studio 2012 我正在使用位桶来存储项目 每次 每当我想要推送或拉取 Git 时 都会询问我帐户密码 在 Windows 8 中 Thanks 您可以使用gitcredentials h
  • 如何从 TFS 获取类似 git 的统计信息

    我已经与 TFS 合作几个月了 希望获得一些基本统计数据并将其提供给我们的团队 在 git 中 我可以检索有关 按作者提交 和 按日期提交 等的统计信息 我想显示来自 TFS 或来自 TeamCity 的类似统计数据 这可能吗 我发现研究
  • 使用脚本检查 git 分支是否领先于另一个分支

    I have branch1 and branch2我想要某种 git branch1 isahead branch2 这将显示如果branch1已承诺branch2没有 也可能指定这些提交 我无法检查差异原因branch2 is在之前br
  • Git 克隆致命

    我在执行 git clone 时遇到错误 fatal pack has bad object at offset 824775943 inflate returned 1 fatal index pack failed 它仅适用于 Wind
  • 我可以从命令行向 github 添加问题吗?

    我是 git 新手 我希望能够通过 github 绘制我的项目的计划和进度 问题是 这需要在 github com 上使用浏览器进行大量点击 并且我希望能够通过使用命令行程序来自动执行该任务 github 有命令行界面吗 有一个ghi ge
  • 如何避免开发人员将凭证推送到 bitbucket?

    我们有一个应用程序 它使用 JSON 文件来定义数据库和其他 API 的连接字符串和凭据 理想情况下 这些凭证作为变量添加到 bitbucket 存储库中 并在 Jenkins 的构建期间进行替换 开发商在当地与他们合作时更换了他们 我们需
  • web2py git 集成 - localhost 和 pythonanywhere

    我完全不知道如何将 Github 集成到 web2py 中 我在 USB 上安装了 web2py任何地方的Python http www pythonanywhere com web2py概述文档chapter3http web2py co
  • Git refs/remotes/origin/master 没有指向有效的对象

    在上次合并到 Git 存储库的 master 分支后 我失去了克隆存储库的能力 Cloning into test repository remote Counting objects 126084 done remote Compress
  • git 命令显示所有(轻量级)标签创建日期

    是否有一个衬垫可以向我显示所有 git 轻量级标签的创建日期 就像是 git show tags format date 我在这个发现link http osdir com ml git 2009 05 msg01404 html适合我需求
  • Git守护进程克隆错误

    All 我正在按照以下指示进行操作this SO https stackoverflow com a 377293 724357答案 快速提供回购 当我跑步时git clone git ipAddr git project我得到这个输出 r
  • 使用 Subversion 进行部分提交

    鉴于我做的案例两个独立的变化 in one文件 例如 添加了一个新方法并更改了另一个方法 我经常不想提交这两项更改 因为one提交 但作为two独立承诺 在 git 存储库上我会使用互动模式 of git 添加 1 http linux d
  • 无法将 git add origin git@anything 与新的 git 目录一起使用

    我有一个项目 我正在生成许多提交 因此它占用的空间正在快速增长 由于我有一个 gitlab 页面来推送提交 因此我决定最好删除本地 git 目录中的这些旧提交 因为我始终可以从 gitlab 获取它们 为此 我只需删除本地 git 目录 然
  • 如何标记单个文件?或如何下载特定文件? - 胃肠道

    我想向文件添加标签以轻松下载该文件而不是整个分支 如何下载GIT中的特定文件 我不知道有什么方法可以标记特定文件git 对于第二个问题 如何下载特定文件git 仅当您的意思是 同时下载 时 以下内容才有效in a git存储库 这就是我理解
  • 返回到存储库中的特定修订后提交并推送更改?

    我们需要及时返回到某个特定的提交 一些意外的改变是为了掌握 尝试恢复它挖得太深 所以 master 的状态很糟糕 现在我们希望master回到66ada4cc61d62afc 根据git 恢复到某个提交 https stackoverflo

随机推荐