Time to compare yet another somehow confusing Git commands. This time being restore, reset, revert and rebase. Obviously, I won’t be doing a deep dive, and I’ll try to be as plain as possible, so you could get the basic understanding.
Working tree and working directory are used interchangeably.
Prerequisites
- Git
Solution
git restore
Experimental command at the time of writing. Restore files in the working tree from the index (the staging area where all git add-ed files reside) or another commit.
- Restore all files in the current directory:
git restore . - Restore a staged (
git add-ed) file:git restore --staged testfile.html - Restore both the index and the working tree (same as
git checkout):
git restore --source=HEAD --staged --worktree testfile.html
git reset
A powerful command that resets the working directory to a specific commit. Updates the current branch and the commit history as well.
git reset --hard HEAD~1to undo the last commit.git reset --hard <COMMIT_ID>to undo changes until the specified commit.
As a rule of thumb, use git reset for undoing uncommitted changes.
git revert
Similar to git reset though the only difference is that it creates a new commit for every revert operation.
git revert HEAD~1to undo the last commit.git revert <COMMIT_ID>to undo changes until the specified commit.
As a rule of thumb, use git revert for undoing committed changes.
git rebase
Not so often used or popular command that moves bunch of commits to a new base. Assuming the following example:
E - F - G ----- feature1
/
A - B - C - D --------- master
Now, if you git checkout feature1 and run git rebase master the feature1 branch will have a new base tip meaning:
E - F - G ----- feature1
/
A - B - C - D --------- master
Conclusion
To find more neat Git commands and hacks, browse the Git category. Feel free to leave a comment below and if you find this tutorial useful, follow our official channel on Telegram.