How do I check if a single commit has already been applied to a specific branch?
Using the documentation of git-cherry as an example:
$ git log --graph --oneline --decorate --boundary origin/master...topic
* 7654321 (origin/master) upstream tip commit
[... snip some other commits ...]
* cccc111 cherry-pick of C
* aaaa111 cherry-pick of A
[... snip a lot more that has happened ...]
| * cccc000 (topic) commit C
| * bbbb000 commit B
| * aaaa000 commit A
|/
o 1234567 branch point
$ git cherry origin/master topic
- cccc000... commit C
+ bbbb000... commit B
- aaaa000... commit A
How would I know that cccc000 has the same content as - cccc111 without having to process the whole tree? Is this possible?
Notice that git-cherry relies on the patch content (diff) and this is key to the question.
git loghas a--cherry-markoption which adds information on symmetric differences (a.k.a "3-dots operator"A...B)Try running :
You should see unique commits prefixed with
+(or*when the--graphoption is on), and commits present on both sides prefixed with=.If you want to know how commits are matched :
git patch-idcomputes the result used by cherry-pick / rebase.git patch-idexpects a patch (as produced bygit showorgit diff) on STDIN :For example : you can view the
patch-ids of all individual commits inA...B:You can use this result in a script, to print more explicitly how commits are linked.