Git Said It Succeeded. The State Said Otherwise. A developer discovered several misleading success messages in Git, including cases where rerere fails to record resolutions after an abort, autoupdate hides conflict checkpoints, and --autosquash can report success while leaving fixup commits behind. The findings, based on tests with Git 2.39.5, highlight the importance of verifying actual repository state rather than trusting command output. I keep finding git behaviours the same way: set up the case, run the command, then check the state I actually cared about instead of trusting the success message. Guides pair rerere.enabled with rerere.autoupdate when the second one removes the checkpoint the first one earns you. GitHub reports mergeable while the reviewer is still reading stale bytes. --autosquash prints Successfully rebased and updated and leaves a fixup commit sitting in history. Copy the config. The reasoning is why you would leave one of them off. This started as a comment on Sylwia Laskowska's git list https://dev.to/sylwia-lask/10-git-commands-youll-wish-you-knew-earlier-4fcp . She asked me to turn it into a post. The first four items are from ordinary rebasing. The rest I measured this week on a stacked-PR repo. rerere does not learn from git add alone git config rerere.enabled true rerere is reuse recorded resolution. It remembers how you resolved a conflict and replays it when the same one appears. On a long rebase that is resolving something once instead of five times. CONFLICT content : Merge conflict in f.txt Staged 'f.txt' using previous resolution. Resolve, git add, then abort immediately, and it recorded nothing. The next attempt conflicts identically. That bit me twice before I understood it. Two things are going on and my test could not separate them, so here are both. git add does not record the postimage — git commit , git rebase --continue , or an explicit git rerere do. And git rebase --abort runs rerere clear , which wipes the in-flight metadata anyway. What I could measure, on git 2.39.5: resolve + git add + abort, and the next attempt conflicts identically. Resolve + git add + explicit git rerere + abort, and it replays — before the rebase goes anywhere. So "it learns when the rebase finishes" is the wrong model either way. I taught it a resolution in one.txt . Then I created the same conflicting hunk in a completely different file, two.txt , on a different branch. It replayed the one.txt answer into two.txt. On a rebase that is usually what you want. It is not always what you want. If the right answer differs between those two places, it will quietly give you the first one. rerere.autoupdate I kept seeing them paired. I checked the index in both modes: php autoupdate off - UU two.txt still conflicted, you must read it and git add autoupdate on - M two.txt fully staged, nothing asks you to look Autoupdate off is the checkpoint that catches a replay you did not want. Leave it off and rerere still writes the resolution into the file. You just have to look at it before adding. If it got it wrong: git rerere forget