Oh no, this commit is a mess! 🤦♂️
We all have a bad day sometimes. We can forget to include a file, leave some comments, or a merge didn't go as expected. Fortunately, Git has some commands to deal with these common situations and I want to show you some of them.
Modify commit message
Oops... You found a spelling mistake in the commit message. No worries, you can modify it:
git commit --amend -m "new message"
Add files to last commit
You already have committed the changes but forgot to add some files. No problem, you can still add them to the commit:
git add <file_name> git commit --amend HEAD~1
If you want to undo the last commit but keep the changes:
git reset --soft HEAD~1
If you want to undo both commit and changes: ⚠️ Be sure that you want to lose the changes:
git reset --hard HEAD~1
Alternatively, if you want to undo all your local changes, you can reset to the origin version of the branch:
git reset --hard origin/<branch_name>
If you want to undo the commit without altering the existing history. You can use
git revert, this command undoes a commit by creating a new commit:
git revert HEAD
If you have just resolved some conflicts, finished the merge, and push to origin. But wait, something went wrong...
The safe way to undo a merge commit that has already pushed to the remote branch is using the
git revert command:
git revert -m 1 <commit_id>
commit_id is the merge commit id that you want to revert.
You can also undo any number of commits. E.g:
git reset HEAD~3(going back three commits before HEAD).
git reset --hard <commit_id>(going back to a specific commit).
git resetif the commit is not pushed yet and you don't want to introduce a bad commit to the remote branch.
git revertto revert a merge commit that has already pushed to the remote branch.
git logto review the commit history.
If you prefer, you can also create a new commit with the fix.
I hope you find these commands as useful as I do and can use them. If you already knew these or think one is missing, please let me know in the comments. Thanks for reading!