Rollback to an old Git commit in a public repo
Master System Design with Codemia
Enhance your system design skills with over 120 practice problems, detailed solutions, and hands-on exercises.
Introduction
Git is a powerful version control system that allows developers to track changes, collaborate on projects, and maintain a history of code modifications. Occasionally, developers need to revert to a previous state of the codebase. This can happen due to bugs, unintended changes, or simply the need to test a feature against a prior version. In this article, we'll delve into the steps and nuances involved in rolling back to an old Git commit in a public repository.
Key Concepts
Before proceeding with the rollback process, it's crucial to understand several Git concepts:
- Commit: A snapshot of your changes. Every commit has a unique SHA-1 hash representing it.
- HEAD: A pointer referring to the current branch and commit.
- History: The series of commits leading to the current project state.
- Branch: A movable pointer to a commit, often used for experimentations or separate development paths.
Steps to Rollback to an Old Git Commit
1. Identify the Commit
The first step is to identify the hash of the commit you want to roll back to. You can view the commit history using:
This command will list all commits along with their hash, author, date, and message. Note the hash of the desired commit.
2. Reset vs. Revert
There are two principal methods to rollback:
- Reset: Changes the current branch to point to a previous commit and discards all changes from the commits after this point.
- Revert: Creates a new commit that undoes all changes made by previous commits.
Reset Method
The syntax for a reset command is:
--hard: This option will reset the files in the working directory to match the specified commit.<commit-hash>: The hash of the commit you want to reset to.
Caution: git reset --hard will discard any changes after the specified commit permanently. Ensure you have backups if needed.
Revert Method
To revert changes, use:
- This command creates a new commit that undoes the specified commit.
Advantages of Reverting:
- Preserves history by creating a new commit.
- Suitable for public, shared repositories as it maintains a clear project history.
3. Push Changes to Remote
Assuming we are working in a public repository, local changes must be synchronized with the remote repository. After using reset or revert, push the changes:
Note: If you performed a reset --hard, you might need to use git push --force as a non-fast-forward update will be necessary.
4. Handle Conflicts
When reverting commits, conflicts might arise if subsequent commits introduced changes to the same lines of code. Git will notify you of these conflicts, requiring manual resolution. After resolving, make sure to complete the revert process:
Summary Table
| Operation | Command Example | Use Case | Impact |
reset | git reset --hard <commit-hash> | Rollback hard | Discards all changes after the log-reset and cleans working directory. |
revert | git revert <commit-hash> | Rollback safely | Preserves commit history by creating a new commit that undoes changes. |
push | git push origin master | Sync to public | Updates the remote repository with local changes. |
resolve | git commit -m "message" | Fix conflicts | Used after resolving merge conflicts. |
Best Practices
- Backup: Always maintain backups for critical files or branches before performing destructive operations like
reset. - Document: Use detailed commit messages to document the reasons for rollback.
- Collaborate: Communicate with team members when making changes to shared public repositories.
- Branching: Consider creating new branches for experimenting or testing rolls back without affecting the main branch.
Conclusion
Rolling back to an old Git commit is a frequent necessity for source control management. Understanding the implications of reset and revert is critical. Using these operations effectively allows teams to maintain consistent, reliable versions of their projects, fostering better collaboration and project stability.

