Is it possible to get ‘git log’ to give the date when a changeset landed on a branch rather than the date when the changeset was created? ‘git log –graph’ (example truncated output below) gives me much of what I want, but it still prints the dates when the individual changesets were created rather than when they were merged into this branch.
* 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
In the above the output is from the master branch. t1 and t2 were created on the foo branch; t3 & t4 were created on bar. Then bar was merged into master followed by merging foo into master.
You can see part of the answer: When branch
foowas merged intomaster, it created a new commit (7e8d68) with two parents.But when
barwas merged intomaster, it was a fast-forward merge. That is, all of the commits onbarwere newer than the newest work onmaster, so they could just be tacked onto the end.That makes for a simpler layout, and so it’s the default behavior. But it leaves no record of the merge — as far as your history is concerned, it will look like those commits were done on
masterin the first place.To get around that, it’s possible to tell git explicitly to avoid fast-forward merges: that is, every single merge should result in a merge commit with two parents, even if a fast-forward merge would be possible. To do that, just use the
--no-ffflag on thegit mergecommand.Unfortunately, because that’s a change in merging behavior rather than logging behavior, you won’t be able to do it retroactively — the information from your previous fast-forward merges doesn’t exist, so there’s no way to get
git logto display it.