GIT - 从上次拉取中获取提交信息和差异

GIT - Get commit messages and diff from last pull

我有一个包含 GIT 个子模块的项目。我想将该子模块中的更改收集到一个文本文件中,并将该文本文件发送到 Jenkins 电子邮件模板。

现在,我有这个命令,它让我在那个子模块中更改了文件:

git diff origin/master --stat >> fullLog.txt

生成的文件如下所示

 test.cs             | 8 +++++++-
 test1.cs            | 3 ++-
 2 files changed, 9 insertions(+), 2 deletions(-)

理想情况下,我想要我们刚刚提取的提交消息,但查看 git-log 文档我必须知道要限制哪个提交。现在,当我这样做时 git log -p 我收到了自项目开始以来的每条消息。

我想要的最终结果是这样的:

Commit a2a4cd6a72892d7a6f0f6e2097d8bf13826a56c3 by jsmith
test-111: clears cache

Commit c58a86c8ebc7153d65c0bfdf0d8e5f92be571b9f by psmith
test-112: Changed setting

 test.cs             | 8 +++++++-
 test1.cs            | 3 ++-
 2 files changed, 9 insertions(+), 2 deletions(-)

如果你知道你刚刚拉取并且拉取实际上有新的提交,那么你可以使用 reflog 来找出你的 HEAD 在拉取之前的状态,并将其用作 git日志。在最后一次更新 HEAD 之前 HEAD 的状态是 HEAD@{1},所以这可能有效:

git log HEAD@{1}.. --stat

您可以 运行 git reflog 查看 reflog 本身。请注意,如果 git pull 没有为签出的分支引入任何新提交,则不会更新 reflog。

我假设您是 运行 脚本中的这个,因此不管是否有更改被拉取,都可以使用的解决方案是在拉取之前保存 origin/master 的先前状态。

prev_master=`git rev-parse origin/master`
git pull
new_master=`git rev-parse origin/master`
if [[ $prev_master == $new_master ]]; then
   #nothing pulled
else
   git log $prev_master..$new_master --stat
fi

并且如果您想要全局文件统计信息但要逐个提交日志,您可以使用这两个命令而不是单个 git log 行:

git log $prev_master..$new_master
git diff --stat $prev_master..$new_master