Objective:
You clone someone else fork and wants to push in your fork
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
Solution:
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 runninggit push myrepo master
And if you want to tell Git that
git push
should push tomyrepo
instead oforigin
from now on, you should rungit push -u myrepo master
instead.