You don't even have to have the public key (just know it's ID). Assuming that someone wasn't purposefully hiding the keys used to encrypt a file/message, then you can use the list-packets
command to do what you are asking.
gpg --list-packets test.txt.gpg
That will show you a listing of each of the decryption packets that are listed in the PGP-ed message/file header. There are ways to encrypt to a key and hide that key from this list, but using the normal commands (like the one in your example) will result in all of the decrypt keys being listed, something like this.
gpg --list-packets crypto-text.pgp
# off=0 ctb=85 tag=1 hlen=3 plen=526
:pubkey enc packet: version 3, algo 16, keyid 2206D60BA555DCB0
data: [2045 bits]
data: [2047 bits]
# off=529 ctb=85 tag=1 hlen=3 plen=526
:pubkey enc packet: version 3, algo 16, keyid 0D6229B307ED0210
data: [2043 bits]
data: [2048 bits]
# off=1058 ctb=85 tag=1 hlen=3 plen=526
:pubkey enc packet: version 3, algo 16, keyid 0E9AFA6C61A4DC66
data: [2048 bits]
data: [2046 bits]
Notice the three different Key IDs listed. Yup, you guessed it, each of those keys can be used to decrypt this particular message.
Bonus points if you do have the public key because then the --list-packets
command will also tell you the friendly name for each of those packets in the message header. (And you get to use the public key you already had around).
But, unless someone is purposefully hiding decryption keys from the listing in the message header, you can see what all PGP keys can be used to decrypt a message without having access to either the public or private key for any of them.
I actually use this far more that I'd like to admit, normally when folks at my company are exchanging PGP-ed messages and suddenly someone can't open one. They always blame the software implementation. So far, every single time, it has been that a message was drafted, encrypted, and after encryption a new recipient was added to the TO list. I can copy out the cypher-text to a crypto-text.pgp file (like in my example) and see exactly who the message was encrypted out to; showing them that tends to stop the "your software plugin is broken" game firmly in its tracks.