问题
For each defect in code I create separate branch. When defect is fixed I merge this branch in master, so I have history like illustrated below (we see two branches with fixes):
defect1 fix defect2 fix
a---b---c---d e---f
/ \ / \
---o---1---x---y---z---2---o---3---w---4---o---
The question is how to get diff for fix1 (between branch start (1) and branch end (2)) or fix2 (diff between (3) and (4)) at any point of time (e.g. for any closed defect in past).
Update: actual question is how to figure out SHA summs of a
and d
or e
and f
to perform next obvious diff command diff <commit> <commit>
回答1:
The answer is simple:
git diff 1..d
This shows the differences between the branching point of your defect1 fix
branch (i.e. 1
) and it's end (i.e. d
).
In order to find the start of the defect1 fix
branch, use
git merge-base master defect1-fix-branch
as indicated in this answer: https://stackoverflow.com/a/2458173/520162.
This gives you 1
according to the documentation of git merge-base.
The end of the defect1 fix
branch is simply identified by it's name. So, finding all differences introduced in defect1 fix
, you need to do
git diff 1..defect1-fix-branch
回答2:
Note: this is equivalent, as detailed in "Not able to think of a case where git diff master..lab and git diff master...lab would be different", to:
git diff master...defect1-fix-branch
git diff A...B
is equivalent togit diff $(git merge-base A B) B

(From "git diff doesn't show enough")
回答3:
What about:
git diff <commit> <commit>
Where the commit parameters are the SHA checksums of the actual commits.
回答4:
If you want to see what changes a feature branch introduced, after it has been merged, you simply run:
git diff HEAD^..HEAD
On the master
branch. That shows differences between the HEAD's (merge commit) first parent and the HEAD, effectively displaying differences the whole feature branch merge brought into the master branch.
No need to make things complex :)
来源:https://stackoverflow.com/questions/10910344/get-git-diff-for-any-merged-branch