Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 获取自特定日期时间以来分支中的更改列表_Git_Git Log - Fatal编程技术网

Git 获取自特定日期时间以来分支中的更改列表

Git 获取自特定日期时间以来分支中的更改列表,git,git-log,Git,Git Log,我们有一个脚本,可以发送包含所有已部署提交列表的电子邮件。它是通过保留上次部署的日期并在给定的时间范围内执行git log(now-last deploy time)来完成的。问题是,它无法生成由于分支而部署的所有更改的列表。我创建了一个极简主义示例来说明这个问题。我很确定这个问题以前有人问过,但显然我无法正确地表述它 * 24d9c49 - (HEAD, master) l-m (Wed Mar 19 15:54:48 2014 +0100) <Andrey> |\ * \

我们有一个脚本,可以发送包含所有已部署提交列表的电子邮件。它是通过保留上次部署的日期并在给定的时间范围内执行
git log
now-last deploy time
)来完成的。问题是,它无法生成由于分支而部署的所有更改的列表。我创建了一个极简主义示例来说明这个问题。我很确定这个问题以前有人问过,但显然我无法正确地表述它

*   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>
返回:

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
是部署前的最后一次提交。因此,我需要存储上次部署之前的上次提交编号,而不是部署的日期时间。

您可以指定一个开放的提交范围:

git log --pretty=format:"%h %s %ad" da47211..
这在
手册
中进行了解释:

历史遍历命令(如git log)对一组提交操作,而不仅仅是单个提交。对于这些命令,使用上一节中描述的符号指定单个修订表示可以从该提交访问的提交集,遵循提交祖先链

要从提交中排除可访问的提交,请使用前缀^表示法。例如,^r1 r2表示可从r2访问的提交,但不包括可从r1访问的提交

这个集合操作经常出现,因此有一个缩写。当您有两个提交r1和r2(根据上面指定修订中解释的语法命名)时,您可以请求可从r2访问的提交,但^r1 r2可从r1访问的提交除外,并且可以将其写入r1..r2

类似的表示法r1…r2称为r1和r2的对称差,定义为r1 r2——而不是$(git merge base——所有r1 r2)。它是一组提交,可以从r1或r2中的任何一个访问,但不能从两者访问

在这两种速记法中,您可以省略一端,让它默认为HEAD。例如,来源。。是原点的简写法..HEAD问“自从我从原点分支分支分叉后我做了什么?”类似地,…origin是HEAD的简写法..origin问“自从我从原点分支分叉后原点做了什么?”注意。。意思是HEAD.。HEAD是一个空范围,既可以从HEAD到达,也不能从HEAD到达


哇,太好了,这正是我需要的。Git的人对我来说是默默无闻的,我并没有真正得到大部分,但通过玩提交数字,我找到了如何做我需要的事情。请看我的最新答案。
git log --pretty=format:"%h %s %ad" da47211..