Git - 查找特定的 git 提交哈希 ID 并将其用作 <start-point> 用于 git 结帐

Git - find a specific git commit hash ID and use it as <start-point> for git checkout

我需要使用 git checkout 和选项 start-point 从现有分支创建一个新分支,但我不确定如何正确确定它。 来自 git log 我需要在消息中找到具有特定事务编号的提交。 例如。来自 git log

..........................................
commit b91a725feea867e371c5488e9fe60ca4cd0e927f
Author: john.smith
Date:   Tue Mar 15 11:54:50 2022 +0100

    Improve error messages for instrument creation

    [AccuRev transaction: 20839205]

commit c4d1ebd3da59efa7223876b1de37960f2e6bcbff
Author: john.smith
Date:   Fri Mar 11 16:52:04 2022 +0100

    Added new libraries

    [AccuRev transaction: 20829020]
   ...............................

因此,例如我需要找到包含此字符串(具有特定事务编号值)的消息的提交:[AccuRev transaction: 20829020] 那么两个问题:

  1. 如何从所有 git logs 中获取此特定的日志消息以及如何为该特定提交检索 commit hash id
  2. 是否足以执行命令 git checkout -b branchName commitHashId 从该特定起点创建新分支?

编辑: git log --grep 在尝试过滤特定 ID 时没有为我提供正确的结果: 请看例子:

git log --grep="[AccuRev transaction: 698102]"
commit f6d975e531b15c14683155a9e3ceca45d6a51854 (HEAD -> SoftBroker)
Author: stefan
Date:   Mon Feb 21 10:57:34 2022 +0100

    SPRs ,,,JIRA Issues SOF-46,SOF-49,SOF-6782,SOF-6784 Promote pom files.

    [AccuRev transaction: 20754456]

commit 0ee4ede74e3efe9d98a42ae5a6cb4c2641cd1384
Author: alek
Date:   Mon Feb 7 17:08:17 2022 +0100

    SOF-6707: Account should be pre-selected after user login    
    [AccuRev transaction: 20706246]

commit 633a0f21584f5578aaac1848255aa850bc95b52a
Author: alek
Date:   Mon Feb 7 17:06:18 2022 +0100

    JIRA Issue increasing version to 2022.1.1 and 2022.Q1.1

    [AccuRev transaction: 20706239]

非常感谢

要查找包含特定消息的修订:

git log --grep=whatever-you-need-to-find

这应该会为您提供与您提供的正则表达式相匹配的修订列表。然后就是check out a branch的问题了。

git checkout some-revision-id 创建新分支。 git 所做的就是转到该修订版并放入工作树,您将处理所谓的 分离的 HEAD... 换句话说,您将在没有分支机构的情况下工作(非常好......git 拥有的最佳功能之一......在众多强大功能中)。如果你想从那个点创建一个分支,你应该 运行

git checkout -b some-new-branch some-revision-id

这将在该修订版上创建新分支并在一次操作中将其检出。

Git 有 revision syntax for simply naming commits by message content.

git checkout -b mynewbranch ':/\[AccuRev transaction: 20829020\]'

需要反斜杠,因为 [ 是搜索表达式语言中的语法标记