我如何才能推到我的叉从原来的回购的克隆?

我在 GitHub 上创建了另一个存储库的 fork (我们称之为 myrepo)(我们称之为 orirepo)。后来,我克隆了 orirepo

git clone https://github.com/original/orirepo.git

我修改了大约20个文件,然后进行了修改并做出了提交

git add
git commit

然而,当我试图推

git push

我得到了这个错误:

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

我知道我犯了一个错误: 我应该克隆我的叉子而不是 orirepo,但现在已经太晚了。 我怎样才能按下我的分叉而不是 origin/orirepo,我没有写访问?

133669 次浏览

好了,我终于编辑了我的 git 配置文件:

$ nano .git/config

改变:

[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

[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

然后,

$ git push

非常有效。

或者,感谢 蒂亚戈 · F · 马塞多回答:

git remote set-url origin https://yourusername@github.com/user/repo.git

默认情况下,在克隆存储库时

  • 位于 https://github.com/original/orirepo.git,
  • 其目前的分支称为 master,

那么

  • 生成的克隆的本地配置只列出一个名为 origin的远程配置,该配置与所克隆的存储库的 URL 相关联;
  • 您克隆中的本地 master分支被设置为 赛道 origin/master

因此,如果不修改克隆的配置,Git 将解释

git push

作为

git push origin master:origin/master

换句话说,git push尝试将本地 master分支推送到驻留在远程存储库上的 master分支(您的克隆人称之为 origin)。但是,您不能这样做,因为您没有对远程存储库的写访问权。

你必须这么做

  1. 要么重新定义与 fork 相关联的 origin远程,方法是运行

    git remote set-url origin https://github.com/RemiB/myrepo.git
    
  2. or, if you want to preserve the original definition of the origin remote, define a new remote (called myrepo, here) that is associated to your fork:

    git remote add myrepo https://github.com/RemiB/myrepo.git
    

    然后,您应该能够通过运行将本地 master分支推到分支

    git push myrepo master
    

    如果您想告诉 Git 从现在开始 git push应该推到 myrepo而不是 origin,那么您应该运行

    git push -u myrepo master
    

instead.

你应该首先在你的帐户中克隆分叉回购。

git clone https://github.com/your_account/repo.git

你绝对有权推到这个回购。如果你想把你的代码推到原来的回购,你可以发出一个拉请求。

所以,你克隆了某人的回购文件做了改动然后意识到你不能推到那个回购文件但你可以推到你自己的分支。所以你就直接把原来的回购单给了他。

你所要做的就是把本地克隆中的原始 URL 和分支回购的 URL 交换。

像这样做

git remote set-url origin https://github.com/fork/name.git

其中 https://github.com/fork/name.git是您的分叉从原始回购的 URL。

在那之后

git push

这样你就可以把你的改变推向你的分叉:)

如果你使用 SSH 进行认证(而不是通过 HTTPS) ,那么你可以将本地克隆的原始 URL 和分支回购的 URL 交换如下:

git remote set-url origin git@github.com:username/repository

那么简单来说:

git push

我想我应该为那些使用 jetbrain IDE (类似的可能也适用于其他 IDE)的用户添加 Git 菜单(通过菜单栏)-> 管理远程-> 编辑你想改变原始位置的回购下的 URL,例如 https://github.com/your_git_handle/your_repo_name.git