You're correct that most Smalltalks have a changes file that keeps a log of everything you've done, but that's now how you do version control or share changes. The changes file in practice is more of a kind of local version control, or unlimited undo buffer. For actually sharing changes, there are two systems that I'm familiar with:
Pharo and Squeak Smalltalk have a DVCS client named Monticello that they use. It works similarly to Git/Mercurial/Bazaar/what-have-you, except that it versions classes and methods semantically instead of the actual changes file. This ends up working fine, and even has some major benefits (you can kiss whole swaths of problems goodbye when you're doing a semantic merge),but it does mean that your Smalltalk code requires its own version control. You can see a quick tutorial of how Monticello handles merging at http://www.lukas-renggli.ch/blog/monticello-merging , and there's what amounts to a command-line interface called Gofer you can read about at http://www.lukas-renggli.ch/blog/gofer . Most people I've seen just use the graphical interface though, which is documented (somewhat) at http://wiresong.ca/monticello/v1/docs/ .
VisualWorks Smalltalk has its own version control system, also semantic, but not distributed, called StORE. I haven't worked with it much, but the general idea is the same: version classes and methods rather than the changes file. I know it can at least import Monticello repositories as well, and possibly work with them natively, but I've never done that, so you'd have to do some more research.