To revert a Git repository to a previous commit, you can use one of the following methods depending on your goal:
1. Reset to a Previous Commit (Destructive)
Use git reset
to remove commits from the branch history (ideal for local/unpushed changes).
# Replace `<commit-hash>` with the target commit ID (e.g., abc123)
git reset --hard <commit-hash>
Example:
git reset --hard abc1234 # Discard all commits after abc1234
Notes:
--hard
: Discards all changes in the working directory and staging area.- Use
git reflog
to recover lost commits if you reset accidentally. - Avoid this for pushed commits (rewrites history; use
git push --force
cautiously if needed).
2. Revert to a Previous Commit (Non-Destructive)
Use git revert
to undo changes from specific commits while preserving history (safe for public/shared branches).
git revert <commit-hash> # Reverts a single commit
# OR
git revert HEAD~3..HEAD # Reverts the last 3 commits
Example:
git revert abc1234 # Creates a new commit undoing abc1234
Notes:
- This creates new commits that reverse the changes.
- Use
git revert --no-commit
to combine multiple reverts into a single commit.
3. Check Out a Previous Commit (Temporary)
Check out a specific commit without altering the branch (creates a detached HEAD state):
git checkout <commit-hash>
To save changes from this state:
git checkout -b new-branch-name # Create a new branch from the old commit
Key Differences
Method | Use Case | History Impact |
---|---|---|
git reset | Discard local/unpushed commits. | Rewrites history (destructive). |
git revert | Undo pushed commits safely. | Preserves history (non-destructive). |
git checkout | Temporarily inspect old code. | No permanent changes. |
Step-by-Step Workflow
Reset to a Previous Commit
- Find the target commit hash:
git log --oneline # Copy the commit hash (e.g., abc1234)
- Reset to that commit:
git reset --hard abc1234
Revert a Specific Commit
- Identify the commit to undo:
git log --oneline # Find the commit hash (e.g., def5678)
- Revert it:
git revert def5678
Important Notes
- Backup Changes: Use
git stash
before resetting to save uncommitted work. - Collaboration: Avoid
git reset
on shared branches (usegit revert
instead). - Recovery: Use
git reflog
to recover lost commits after agit reset
.
By choosing the right method, you can safely roll back your Git repository!