One command, git reset --hard, and weeks of machine-to-machine communication states vanished without a trace. The services didn’t fail because the code was wrong. They failed because the history was rewritten in a live, distributed system that never forgot a thing—until it did.
Git reset is a sharp tool. In a local repo, it’s a clean way to roll back work. In systems where machines talk to other machines—syncing configs, publishing artifacts, moving through CI/CD pipelines—it can be a grenade. The problem is simple: machines aren’t just reading code; they’re expecting specific commit histories, tags, and artifacts to match. Reset changes those fingerprints.
Machine-to-machine communication thrives on contractual truth: the version identifiers, the commit hashes, the immutable links. Break this truth and downstream services throw errors, caches corrupt, deployments fail without clear cause. If you’ve ever had a deployment read “successful” but wake up to an outage, you’ve felt how silent and vicious this problem can be.