git log foo..bar - 如何查看*合并日期*的变更集?

时间:2012-04-25 16:51:59

标签: git

当变更集落在分支而不是创建变更集的日期时,是否可以让'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合并为主。{/ p>

1 个答案:

答案 0 :(得分:7)

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

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

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

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

不幸的是,因为这是合并行为而非记录行为的变化,您将无法追溯性地执行此操作 - 来自您之前的快速信息 - 正向合并不存在,因此无法让git log显示它。