如何从git log --merges -n 1获取特定行

问题描述

当我尝试做git log --merges -n 1时,我看到以下输出

Merge: 12hjkda1222
Author: testuser
Date:   Tue Sep 1 22:38:42 2020 -0400

    test-1.1

    Merge in proj/repo from release/test-1.1 to master

    * commit 'aczlxhclzsjcfpod2369841':
      release

我只希望将proj / repo从release / test-1.1合并到master的行。尝试使用git log --oneline --format =%B -n 1 HEAD和git log --oneline --format =%B -n 1 HEAD | head -n 1不会输出我想要的结果。有没有办法我可以从输出提取特定行

解决方法

这需要三个步骤。

  1. 找到您关心的特定提交。如果LifecycleObserver是查找提交的可用方法,则可以将其与步骤2结合使用,但是找到它的正确方法通常是使用单独的git log命令。

  2. git rev-listgit log伪指令一起使用,与您的操作非常相似(只是省略--format,它会设置自己的单独格式)。使用--oneline格式来获取消息正文,包括主题行。

  3. 例如,用%Bsed来选择所需的行作为正则表达式。也就是说,将第2步中的命令与管道一起用于第二个命令,以查找所需的行。

由于在这种情况下,第1步和第2步可以轻松合并,因此您可以使用例如:

grep

或:

git log --merges -n 1 --format=%B | grep '^Merge '

(请注意,两者之间的区别在于git log --merges -n 1 --format=%B | sed -n -e 3p 命令将查找与模式匹配的每一行,而grep命令仅打印第三行,而不管哪一行,以sed开头。