我想找到一个不是合并提交的最后一个(最新的)Git提交。
(假设我们只检查提交消息,如果它不以Merge
开头,那么我们假设提交不是合并 - BTW有更好的方法吗?)
我发现此帖可能有用:
http://mislav.uniqpath.com/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
我可以将这些态度混合起来以显示上次合并提交(这很有效):
$ git show --format=%B ':/^(Merge)'
然而,正则表达式的语法(从:/
开始)非常模糊,不容易找到文档,我不明白如何反转它。当我尝试?!
时出现错误:
$ git show --format=%B ':/^(?!Merge)'
fatal: Invalid search pattern: ^(?!Merge)
有人可以指导我如何对git show
应用否定匹配吗?
请注意,提交消息可以是多行的。
编辑:
让我们考虑一个简单的场景,其中所有合并都可以快进(但不是)。我希望以红色标记的提交被发现为“最新”。
像这样的剧本似乎可以解决这个问题但是它很冗长
#!/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"
答案 0 :(得分:7)
git rev-list --no-merges -n 1 HEAD
如果您想要人类可读的输出而不仅仅是在脚本编写时可能更有用的sha1,您也可以使用log
代替rev-list
。
(如果你想要最新的日期而不是仅仅按照拓扑顺序排列的'a',你可能想要使用--date-order
。)
答案 1 :(得分:0)
以下命令不如查尔斯的答案好,但短时间可以快速使用。
var result = tableA.Select(item => item.description.Split()[0]).Distinct();