13

是否可以让“git log”给出变更集登陆分支的日期而不是创建变更集的日期?'git log --graph'(下面的截断输出示例)给了我很多我想要的东西,但它仍然打印各个变更集的创建日期,而不是它们合并到这个分支的日期。

*   commit 7e8d68fc58b915cc17bca41be833c4f7a062cd3c
|\  Merge: 1b4f10d af0dcdd
| | Date:   Wed Apr 25 17:40:16 2012 +0100
| |     Merge branch 'foo'
| * commit af0dcdd078197a852fcfad11c5111aa11579aa05
| | Date:   Wed Apr 25 17:36:50 2012 +0100
| |     t2: adding lorem ipsum again
| * commit 569f5de0eb40cbf198771812f9b099cf71b5b056
| | Date:   Wed Apr 25 17:36:36 2012 +0100
| |     t1: adding lorem ipsum
* | commit 1b4f10d3eea7c9c6304f7b1fd41818b932e4dad0
| | Date:   Wed Apr 25 17:38:24 2012 +0100
| |     t4: fi fo fa fum x 2
* | commit d25fa0359fbe655b6a4adeb6225ac283b3543ece
|/  Date:   Wed Apr 25 17:38:10 2012 +0100
|       t3: fi fo fa fum
* commit d3239b3e327f740fc7194ecf164538361f715ab5
  Date:   Wed Apr 25 17:34:50 2012 +0100

上面的输出来自master分支。t1 和 t2 在foo分支上创建;t3 & t4 创建于bar. 然后bar被合并到master,然后被合并foo到master。

4

1 回答 1

16

您可以看到部分答案:当分支foo合并到master时,它创建了一个具有两个父级的新提交 (7e8d68)。

但是当bar被合并到时master,它是一个快进合并。也就是说,所有的提交bar都比最新的工作更新master,所以它们可以被添加到最后。

这使得布局更简单,因此它是默认行为。但它没有留下合并记录——就您的历史而言,看起来这些提交是master首先完成的。

为了解决这个问题,可以明确地告诉 git 避免快进合并:也就是说,即使快进合并是可能的,每次合并都应该导致两个父级的合并提交。为此,只需使用命令--no-ff上的标志。git merge

不幸的是,因为这是合并行为而不是日志记录行为的变化,所以您将无法追溯 - 来自先前快进合并的信息不存在,因此无法git log显示它。

于 2012-04-25T17:07:45.363 回答