git - 如何在 Git 中查找最新的非 merge 提交消息?

标签 git bash

我想找到一个不是 merge 提交的最后(最新)Git 提交。

(假设我们只是检查提交消息,如果它不是以 Merge 开头,那么我们假设提交不是 merge - 顺便说一句,有没有更好的方法?)

我发现这篇文章可能有用:

https://mislav.net/2010/07/git-tips/

Show the last commit which message matches a regex

$ git show :/fix
# shows the last commit which has the word "fix" in its message

$ git show :/^Merge
# shows the last merge commit

我可以混合这些态度来显示最后的 merge 提交(这很有效):

$ git show --format=%B ':/^(Merge)'

但是这里正则表达式的语法(以 :/ 开头)非常晦涩,不容易找到文档,而且我不明白如何反转它。当我尝试 ?! 时出现错误:

$ git show --format=%B ':/^(?!Merge)'
fatal: Invalid search pattern: ^(?!Merge)

有人可以指导我如何使用 git show 应用否定匹配吗?

请注意,提交消息可以是多行的。

编辑:

gitk merges

让我们考虑一个简单的场景,其中所有 merge 都可以快进(但不是)。我希望以红色标记的提交被发现为“最新”。

像这样的脚本似乎可以解决问题,但它很冗长

#!/bin/bash
readCommitMessage () {
    local commit="$1"
    lastCommitMsg=$(git log -1 --pretty=%B $commit)
    #echo "$lastCommitMsg"
}

commit="HEAD"
readCommitMessage
while [[ "$lastCommitMsg" == Merge* ]]; do
    commit="$commit""^2"
    readCommitMessage "$commit"
done

echo "$lastCommitMsg"

最佳答案

git rev-list --no-merges -n 1 HEAD

如果您想要人类可读的输出而不仅仅是 sha1,您也可以使用 log 而不是 rev-list,这在编写脚本时可能更有用。

(如果您想要按日期获取最新信息而不是按拓扑顺序获取“a”最新信息,则可能需要使用 --date-order。)

关于git - 如何在 Git 中查找最新的非 merge 提交消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22247035/

相关文章:

git - 在git中构建相关组件

git - 是否可以使用 Jenkins 管道进行 Git merge/推送

linux - 从unix中的倒数第二行删除一个字符

bash - kafka-console-producer : command not found

linux - 期望自动登录成功,但无法执行任何命令

linux - BASH: "local var=${3-16}"含义不明

git bash : Can't spawn kdiff3 as difftool

git - 如何在 github 上使用多行提交消息?

Github 在我提交时无法识别我的帐户

Bash 删除目录中的一半文件