&gt; all following commits are preserved (hash doesn&#x27;t change), but that&#x27;s essentially impossible.<p>Actually, you only need <i>one</i> brute-force (of the commit that you&#x27;re changing); subsequent commits only refer to the parent hash, and here we&#x27;re not changing the commit trees either.<p>SHA1 is already considered broken, so git really should switch to SHA256 soon. This whole &quot;sha1 commit hashes are not for security&quot; argument is mostly naive and bogus.<p>The only way it would be safe, is if (a) everyone set their GPG to default to SHA256 or above (older versions still default to SHA1) and (b) either (b.1) everyone signed every commit this way, or (b.2) everyone signed their tags this way <i>and</i> just before tagging, reviewed their local commits including commits not authored by them up to the previously trusted tag.<p>But if git defaulted to SHA256 or SHA512, then we wouldn&#x27;t have to reason through the complex scenarios involving (b). Making something &quot;too secure&quot; is a good thing if it simplifies your security analysis and allows you to use your head for other productive things.