Git
How to Fork a Repository on GitHub?
Forking a repository on GitHub is one of the most common actions for developers who want to contribute to open-source projects, test new features, or create a version of a repository that they can customize without affecting the original code. A “fork” is essentially a copy of another user’s repository, enabling you to make changes to the codebase independently.
In this post, we’ll walk through why and when to fork a repository, the steps to fork it, and how to keep your fork in sync with the original repository.
Why Fork a Repository?
Forking is an essential step in the collaborative workflow of GitHub. Here are some common reasons why developers fork repositories:
- Contributing to Open Source: Forking allows you to propose changes or improvements to an open-source project by creating a copy you can modify and later submit as a pull request.
- Customizing a Repository: If you want to use an open-source project but need it to perform slightly differently, forking allows you to create a personalized version without affecting the original project.
- Learning and Experimenting: Forking is useful for testing code changes or learning how a project works without risking any harm to the original codebase.
Step 1: Navigate to the Repository on GitHub
Go to the repository you want to fork by using GitHub’s search bar or by directly navigating to the repository URL. Once you’re on the repository’s main page, you’ll see the option to fork near the top right of the page.
Step 2: Click the Fork Button
In the upper-right corner of the repository page, you’ll see a button labeled Fork. Click on this button to start the process. GitHub will ask you where you want to fork the repository if you belong to multiple organizations, but usually, you’ll fork it to your personal GitHub account.
Once you click Fork, GitHub will create a new copy of the repository under your GitHub account. You can find this forked repository in your repositories list, and it will have a small label under the repository name indicating that it’s forked from the original repository.
Step 3: Clone Your Forked Repository (Optional)
If you want to work on the code locally, the next step is to clone your forked repository to your computer.
To clone the forked repository, follow these steps:
- Go to your forked repository on GitHub.
- Click on the Code button (green) to display the URL options.
- Copy the URL of the repository. You can use HTTPS, SSH, or GitHub CLI, depending on your preferences.
- Open your terminal or command line interface and use the following command to clone the repository:
git clone <your-forked-repository-url>
Replace <your-forked-repository-url>
with the URL you copied. This command will download the repository to your local machine, creating a directory with all of its files.
Step 4: Add the Original Repository as an Upstream Remote (Optional)
If the original repository is actively maintained, you may want to keep your forked repository in sync with it. To do this, you can add the original repository as a remote, which allows you to pull in updates from it at any time.
- First, navigate into your local repository’s directory:
cd <your-forked-repository-name>
- Add the original repository as a remote and name it “upstream”:
git remote add upstream <original-repository-url>
Replace <original-repository-url>
with the URL of the original repository. You can find this URL by visiting the original repository on GitHub and copying the URL from the Code button.
- To verify that the upstream remote has been added, use the following command:
git remote -v
You should now see both origin
(your fork) and upstream
(the original repository) listed.
Step 5: Keep Your Fork Updated with Upstream Changes
If the original repository is frequently updated, you’ll want to sync these updates to your fork to avoid conflicts and ensure your copy remains current.
- First, fetch any changes from the upstream repository:
git fetch upstream
- Then, switch to your fork’s main branch and merge the changes from upstream:
git checkout main
git merge upstream/main
Replace main
with the appropriate branch name if the repository uses a different default branch. If there are no conflicts, this command will merge the changes from the original repository into your fork.
- Finally, push the updated branch to your GitHub fork:
git push origin main
Keeping your fork updated is crucial when contributing to an actively maintained repository, as it minimizes potential conflicts when you submit a pull request.
Step 6: Make Changes and Submit a Pull Request
Once your fork is up to date, you can make changes to your local repository, commit them, and push them to your GitHub fork. After that, you can submit a pull request (PR) to the original repository if you want your changes to be considered for inclusion.
To submit a pull request:
- Push your changes to a branch on your GitHub fork.
- Go to the original repository and click Pull requests.
- Select New pull request and choose compare across forks if necessary.
- Choose your forked repository and branch for the comparison, review the changes, and submit your pull request.
Best Practices When Working with Forked Repositories
- Create Feature Branches: Instead of making changes on your main branch, create a new branch for each feature or bug fix. This practice keeps your main branch clean and makes it easier to manage multiple pull requests.
git checkout -b feature-branch
- Write Clear Commit Messages: Make sure your commit messages are clear and describe the changes you’ve made. This makes your contributions easier for others to review.
- Regularly Sync with Upstream: If the original repository changes frequently, sync your fork with it regularly to minimize conflicts and avoid a large backlog of updates.
Frequently Asked Questions
Q: Can I delete my fork after submitting a pull request?
A: Yes, you can delete your fork after your PR is merged or closed, but note that you’ll lose any GitHub-specific data associated with it, such as PR comments. If you want to keep a copy of your work, consider archiving the repository instead.
Q: How do I undo a fork?
A: GitHub doesn’t have an “undo fork” feature. However, you can delete the forked repository from your account if you no longer need it.
Q: Can I fork a private repository?
A: You can fork a private repository if you have access to it, but the fork will also be private and can only be accessed by those who have permissions.
Conclusion
Forking a repository on GitHub is a simple but powerful way to collaborate on open-source projects, customize codebases, and safely experiment with changes. By following these steps, you can easily fork a repository, sync it with the original, and contribute back to the community. Whether you’re contributing fixes, adding new features, or learning from others’ code, forking opens up new opportunities for collaborative development on GitHub.