til / Rewriting git commit history
If you want to fix a commit inside a PR you can use Git rebasing and the easiest way to do it is using an interactive rebase. Let’s say you have three commits:
- Commit A (sha: 123)
- Commit B (sha: 456)
- Commit C (sha: 789)
Now you want to change Commit B. Start by finding its SHA ID using git log
, in this example we’ve called it 456
.
Run git rebase -i 456^
to start an interactive rebase. Note the ^
at the end which includes the commit in question in the rebase
You’ll be presented with a Vim buffer that would look something like:
pick 456 Commit B
pick 789 Commit C
# Commands
# p, pick <commit> = use commit
# e, edit <commit> = use commit, but stop for amending
# ...
Notice the edit command, which is exactly what we want. Alter the line for Commit B with the edit command instead of the pick command.
edit 456 Commit B
pick 789 Commit C
After saving, you’ll be taken back in time to Commit B where you can make the changes you set out to do.
Once your done with the changes, run git rebase --continue
to take you back to the present.
If you would run git log
at this point you would notice that the commit SHAs for Commit B and Commit C have changed. This happened be we altered history using with our rebase. To update our PR we need to do a force push, git push -f
Only do this in pull requests, don’t alter your commits on you default branch.
- Johnny Ji. (2021-06-08). Engineering Culture: Keeping a Clean Commit History. Link