pristine restores the installed gems in the bundle to their pristine condition using the local gem cache from RubyGems. For git gems, a forced checkout will be performed.
For further explanation, bundle pristine ignores unpacked files on disk. In other words, this command utilizes the local .gem cache or the gem´s git repository as if one were installing from scratch.
Note: the Bundler gem cannot be restored to its original state with pristine. One also cannot use bundle pristine on gems with a ´path´ option in the Gemfile, because bundler has no original copy it can restore from.
When is it practical to use bundle pristine?
It comes in handy when a developer is debugging a gem. bundle pristine is a great way to get rid of experimental changes to a gem that one may not want.
Why use bundle pristine over gem pristine --all?
Both commands are very similar. For context: bundle pristine, without arguments, cleans all gems from the lockfile. Meanwhile, gem pristine --all cleans all installed gems for that Ruby version.
If a developer forgets which gems in their project they might have been debugging, the Rubygems gem pristine [GEMNAME] command may be inconvenient. One can avoid waiting for gem pristine --all, and instead run bundle pristine.