How can I push to my fork from a clone of the original repo?
GitGithubGit Problem Overview
I created a fork (let's call it myrepo
) of another repository (let's call it orirepo
) on GitHub. Later, I cloned orirepo
.
git clone https://github.com/original/orirepo.git
I modified about 20 files, then I staged my change and made a commit
git add
git commit
However, when I tried to push
git push
I got this error:
remote: Permission to original/orirepo.git denied to mylogin.
fatal: unable to access 'https://github.com/original/orirepo.git/': The requested URL returned error: 403
I know I made a mistake: I should have cloned my fork rather than orirepo
, but it's too late for that now.
How could I push to my fork rather than to origin/orirepo
, which I don't have write access to?
Git Solutions
Solution 1 - Git
By default, when you clone a repository
- that resides at
https://github.com/original/orirepo.git
, - whose current branch is called
master
,
then
- the local config of the resulting clone lists only one remote called
origin
, which is associated with the URL of the repository you cloned; - the local
master
branch in your clone is set to trackorigin/master
.
Therefore, if you don't modify the config of your clone, Git interprets
git push
as
git push origin master:origin/master
In other words, git push
attempts to push your local master
branch to the master
branch that resides on the remote repository (known by your clone as origin
). However, you're not allowed to do that, because you don't have write access to that remote repository.
You need to
-
either redefine the
origin
remote to be associated with your fork, by runninggit remote set-url origin https://github.com/RemiB/myrepo.git
-
or, if you want to preserve the original definition of the
origin
remote, define a new remote (calledmyrepo
, here) that is associated to your fork:git remote add myrepo https://github.com/RemiB/myrepo.git
Then you should be able to push your local master
branch to your fork by running
git push myrepo master
And if you want to tell Git that git push
should push to myrepo
instead of origin
from now on, you should run
git push -u myrepo master
instead.
Solution 2 - Git
So, you cloned someone's repo made the changes and then realized you can't push to that repo, but you can push to your own fork. So, you went ahead and forked the original repo.
All you have to do is swap the origin URL in your local clone with the URL of your forked repo.
Do it like this
git remote set-url origin https://github.com/fork/name.git
Where https://github.com/fork/name.git
is the URL of your fork from the original repo.
After that, just
git push
and you'll be able to push your changes to your fork :)
Solution 3 - Git
Okay I finally edited my git config file :
$ nano .git/config
changing :
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = https://github.com/<origin-project>/<origin-repo>.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
to
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = https://github.com/<mylogin>/<myrepo>.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
Then,
$ git push
Worked like a charm.
Or, thanks to Thiago F Macedo answer :
git remote set-url origin https://yourusername@github.com/user/repo.git
Solution 4 - Git
If you are using SSH for authentication (instead of over HTTPS) then you can swap the origin URL in your local clone with the URL of your forked repo as follows:
git remote set-url origin git@github.com:username/repository
Then simply:
git push
Solution 5 - Git
Thought I'd add for those using a jetbrains IDE (similar probably applies to others)
Git menu (via menu bar) -> Manage Remotes -> Edit the URL under the repo you want to change the origin location for to e.g. https://github.com/your_git_handle/your_repo_name.git
Solution 6 - Git
You should clone the forked repo in your account first.
git clone https://github.com/your_account/repo.git
You absolutely have permissions to push to this repo. If you want to push your code to original repo, You can issue a pull request.