If you only care about blinding the commitment (to prevent brute-forcing), and do not need additively homomorphic commitments, you can do the following:
The prover has a key pair $(x, X=xG)$, and publishes the public key $X$.
For each member of the set, the prover publishes:
$C_i=H_p(m_i) + r_iG$, where $H_p(m_i)$ means to hash $m_i$ and interpret the result as a valid EC point.
$D_i=xH_p(m_i)$
$E_i=xC_i$
A DLEQ proof that $X$ and $E_i$ share the same private key $x$ on the points $G$ and $C_i$
A signature for the public key $(E_i-D_i)$ on the generator $G$.
Note that $E_i-D_i==xH_p(m_i)+xr_iG-xH_p(m_i)==xr_iG$.
The DLEQ proof (item 4) will prove that $E_i$ was calculated properly. What we're doing here is using a verifiable pseudo-random function (VPRF) that only the prover can query but that any observer can verify.
The signature (item 5) will only be possible if $D_i$ has also been calculated properly, since the signature will only be possible on the generator $G$ if there is no $H_p()$ component left over (because the EC discrete log w.r.t. $G$ is not knowable for any output of $H_p()$).
The end result is that we've created a VPRF output $D_i$ for each message $m_i$, and proven that each VPRF output has been declared correctly.
Now it will be immediately obvious if there are any commitments to the same message, since they will share the same $D_i$ values.