Git has the ability to show you what changed in a commit using "git show COMMIT" and something like "git diff COMMIT^!". However, they don't work quite like what I expected, and I'm wondering if anyone has hints that could help.
Specifically, I want to look at "what are the changes brought in by this commit". Equivalent to what in Bazaar would be: bzr diff -c 4567 It seems like "git show deadbeat" and "git diff deadbeef^!" work like I want when there is a single parent (just a simple commit). The issue for me is that I want to see a similar diff for a merge commit. I realize that in git it models merge commits slightly differently. Again it doesn't have a preference for a mainline, so by default diff of a merge commit is just the differences in the merge that *aren't* in the parents. I can understand that PoV, but I'd like to find a way to express the other PoV as well. The main problem with merge commits is that "git diff deadbeef^!" shows me the *reverse* diff. For a concrete example, take the recent merge: 7360086 Better status information when a relation hook fails git diff 7360086^ 7360086 Shows me what I want. (or git diff 7360086^1 7360086) git log -p 7360086 shows no diff for that revision git show 7360086 similarly, no diff. git diff 7360086^2 7360086 Is the diff against the merged in parent, which is appropriately nothing. git diff 7360086^! is the reverse of the diff I want Maybe: git diff 7360086^@ This seems to give me the diff I was looking for, but that might be accidentally. "man git-rev-parse" says this is: A suffix ^ followed by an at sign is the same as listing all parents of <rev> (meaning, include anything reachable from its parents, but not the commit itself). So it sounds like that is actually doing: git diff 7360086^1 7360086^2 (Show me the diff of the one parent vs the other parent). It happens to be correct this time because we have a simple no-change merge. Now I'm even more confused, because I went to a different revision, which is a simple merge that isn't a trivial (could have been fast forwarded) 348c104 Ensure availability command output. If I do: git show 348c104 It has no diff, as I would have expected. If I do: git diff 348c104^ 348c104 It looks like I would expect. And this git diff 348c104^! Also works. However as I was worried about: git diff 348c104^@ Is showing me the changes introduced by one parent, and the *removal* of all the changes that were in mainline at that point. So the only syntax that reliably gives me what I want is: git dif 348c104^ 348c104 I was hoping there would be a better shortcut for it. Does anyone have some more voodoo that I could use to avoid having to type the same thing twice? (I guess since git commit ids are 7 digit hexadecimal I almost never type them and almost always copy&paste, so it isn't *that* much harder to type it twice. I do miss "bzr diff -c 5678", though.) John =:->
-- Juju-dev mailing list [email protected] Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/juju-dev
