我们有一个脚本,发送包含所有已部署提交的电子邮件。它是通过保留上次部署日期并针对给定时间范围 (
现在-上次部署时间
) 进行 git log
实现的。问题在于由于分支,它无法生成所有已部署更改的列表。我创建了一个简单的示例来展示这个问题。我很确定这个问题以前被问过,但显然我没有正确表达。* 24d9c49 - (HEAD, master) l-m (Wed Mar 19 15:54:48 2014 +0100) <Andrey>
|\
* \ 0f29219 - r-m (Wed Mar 19 15:54:48 2014 +0100) <Andrey>
|\ \
* | | 73a1f4b - m3 (Wed Mar 19 15:54:48 2014 +0100) <Andrey>
| * | 349c1eb - (right) r1 (Wed Mar 19 15:54:47 2014 +0100) <Andrey>
|/ /
| * 15c190f - (left) l2 (Wed Mar 19 15:54:46 2014 +0100) <Andrey>
| * 50b8c59 - l1 (Wed Mar 19 15:54:45 2014 +0100) <Andrey>
* | da47211 - m2 (Wed Mar 19 15:54:44 2014 +0100) <Andrey>
|/
* 581e3a9 - m1 (Wed Mar 19 15:54:43 2014 +0100) <Andrey>
假设我之前在 15:54:48
部署了,现在我想获取将与当前部署一起部署的提交列表。 我执行以下操作:
git log --pretty=format:"%h %s %ad" --since='Wed Mar 19 15:54:48 2014 +0100'
返回:
24d9c49 l-m Wed Mar 19 15:54:48 2014 +0100
0f29219 r-m Wed Mar 19 15:54:48 2014 +0100
73a1f4b m3 Wed Mar 19 15:54:48 2014 +0100
显然这不是真的,因为它错过了提交l1、l2和r1,因为它们在其他分支上的最后一次部署之前就已经提交了,但现在刚刚合并。所以这不仅仅是时间的问题。我想出了一个算法来处理这种情况,但它相当复杂,所以我希望也许有更简单的命令可以生成考虑到分支的日志。
更新,解决方案:根据@user3426575的建议,我发现我需要这样做:
git log --pretty=format:"%h %s %ad" HEAD ^da47211
在部署之前,da47211
是最新提交。因此,在上一次部署之前需要存储最后一次提交的编号,而不是部署的日期。