Undo git pull, how to bring repos to old state
Master System Design with Codemia
Enhance your system design skills with over 120 practice problems, detailed solutions, and hands-on exercises.
In Git, the git pull command is used to fetch and integrate changes from a remote repository into your current branch. This practical functionality keeps your local repository updated with others' work. However, situations may arise where a git pull introduces unexpected conflicts, bugs, or undesired features. In such cases, reverting your repository to its state before the pull can be crucial. Here we discuss various methods and concepts for undoing a git pull.
Understanding git pull
The git pull command is essentially a combination of two other commands: git fetch followed by git merge. The git fetch part fetches all the new data from a specified remote repository, and git merge merges this new data into your current working branch.
Techniques to Undo a git pull
1. Using git reset
The most straightforward approach to undo a git pull is using the git reset command, which allows you to reset your current branch's HEAD to a previous state.
- Hard Reset to a Previous Commit: You can use
git reset --hard <commit-hash>to reset your repository to a particular commit before the pull. You can find the appropriate commit hash viagit log.
- Using ORIG_HEAD: After a
git pull, Git automatically sets the ORIG_HEAD to point to the tip of your branch just before the pull. You can reset using:
2. Reverting Merge Commit
If the git pull created a merge commit and you prefer not to lose the subsequent commit history, you can revert the merge commit using:
This command creates a new commit that undoes the changes introduced by the specified merge commit.
3. Checking Out to a Previous State
For temporary examination or fixes, you might want to checkout to a previous state without altering the current branch history:
Remember that this puts you in a 'detached HEAD' state, where any new changes aren't associated with any branch.
Best Practices and Considerations
- Backup Before Reverting: Always consider backing up the current state before resetting or reverting, especially in collaborative environments where overwriting history can cause issues for other developers.
- Communication: If working in a team, communicate any major reversion or undo's, as it might affect the workflow or the remote history if already pushed.
- Use Tags for Safety: Before performing a pull, tagging the current commit can help safely return to that state if needed. Create a tag with:
Summary Table
| Action | Command | Use Case |
| Reset Hard to Commit | git reset --hard <commit-hash> | Completely undo the pull, losing changes after the pull. |
| Reset Using ORIG_HEAD | git reset --hard ORIG_HEAD | Quickly revert to the state before the latest pull. |
| Revert Merge Commit | git revert -m 1 <merge-commit-hash> | Undo the pull but keep other history intact. |
| Checkout Previous State | git checkout <commit-hash> | Temporarily examine or work in an old state without altering branch history. |
Conclusion
Understanding how to undo a git pull can save a developer from many headaches, particularly in a collaborative environment. Whether using git reset to forcefully revert changes or more subtle methods like reverting or checking out specific commits, managing your repository's history effectively is a key skill in Git.

