One of the main design goals for Cargo is reproducable builds. E.g. the first time anything is build Cargo will create a Cargo.lock[0] file that fixes the dependency at the exact commit that the build used, so one can come back in a year and rerun to get the same result (assuming upstream hasn't edited their history). Upgrading/changing a dep then requires explicitly calling `cargo upgrade`.
One can also manually specify versions and exact commits[1] in the Cargo.toml (the file written to specify those deps), e.g.
[dependencies.lazy_static]
git = "https://github.com/Kimundi/lazy-static.rs"
version = "1.1"
[0]: e.g. https://github.com/servo/servo/blob/master/Cargo.lock (machine generated/consumed)[1]: http://doc.crates.io/manifest.html#the-%5Bdependencies.*%5D-...