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 log
has a--cherry-mark
option 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--graph
option is on), and commits present on both sides prefixed with=
.If you want to know how commits are matched :
git patch-id
computes the result used by cherry-pick / rebase.git patch-id
expects a patch (as produced bygit show
orgit diff
) on STDIN :For example : you can view the
patch-id
s of all individual commits inA...B
:You can use this result in a script, to print more explicitly how commits are linked.