Git
How to Unfork a Repository in GitHub?
When you fork a repository on GitHub, it creates a duplicate of the original repository (upstream) under your account. However, GitHub doesn’t provide a direct way to “unfork” a repository—that is, to disconnect it from the original repository while retaining its content. While there’s no one-click solution, there are workarounds to achieve this. This post walks you through the process of effectively unforking a GitHub repository.
What Does “Unforking” a Repository Mean?
Unforking involves:
- Removing the Link to the Original Repository: Detaching your repository from the upstream repository.
- Retaining Your Work: Preserving all commits, branches, and files in the repository.
Why Unfork a Repository?
Some reasons for unforking a repository include:
- Independence: You want your repository to be standalone and not associated with the original repository.
- Rebranding: Transitioning a forked repository into a unique project.
- Ownership: The forked repository has diverged significantly, making the connection to the original irrelevant.
Steps to Unfork a Repository on GitHub
Since GitHub does not allow unforking directly, the process involves creating a new repository and transferring your content to it.
Step 1: Clone the Forked Repository Locally
Start by cloning the forked repository to your local machine:
git clone https://github.com/your-username/forked-repo.git
cd forked-repo
This creates a local copy of your forked repository.
Step 2: Remove the Upstream Remote
To ensure that the new repository is completely independent, remove any references to the original repository (upstream remote):
git remote remove origin
This removes the link to the original fork.
Step 3: Create a New Repository on GitHub
- Go to your GitHub account and click Repositories.
- Click the green New button.
- Provide a name for your new repository and set its visibility (public or private).
- Do not initialize the repository with a README, license, or
.gitignore
file.
Step 4: Add the New Repository as a Remote
In your local repository, add the newly created repository as the remote:
git remote add origin https://github.com/your-username/new-repo.git
Step 5: Push Your Content to the New Repository
Push all your local branches and tags to the new repository:
git push -u origin --all
git push -u origin --tags
This transfers the complete history and structure of the original repository to the new one.
Step 6: Delete the Forked Repository (Optional)
If you no longer need the forked repository, delete it:
- Go to the forked repository on GitHub.
- Navigate to Settings.
- Scroll to the Danger Zone section.
- Click Delete this repository and confirm.
Verifying the Unforking Process
- Visit your new repository on GitHub to ensure all content, branches, and commits are present.
- Confirm that the repository no longer shows the “forked from” message at the top.
Best Practices
- Preserve the Original Repository: If you’re unsure about deleting the forked repository, consider archiving it instead for reference.
- Document the Process: Add notes or documentation in the new repository if it’s derived from another source.
- Communicate with Collaborators: If you’re working in a team, inform your collaborators about the change to avoid confusion.
Conclusion
While GitHub doesn’t offer a built-in “unfork” feature, the workaround of creating a new repository and transferring your content is effective. By following the steps above, you can detach your repository from the original and manage it independently, ensuring complete ownership and control.