如何从原始仓库的克隆中推送到我的前叉?

时间:2014-08-28 09:42:28

标签: git github

我在GitHub上创建了另一个存储库(让我们称之为myrepo)的fork(让我们称之为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,我没有写入权限?

5 个答案:

答案 0 :(得分:150)

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

  • 位于https://github.com/original/orirepo.git
  • 其当前分支名为master

然后

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

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

git push

作为

git push origin master:origin/master

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

你需要

  1. 通过运行

    重新定义与您的分机相关联的origin遥控器
    git remote set-url origin https://github.com/RemiB/myrepo.git
    
  2. 或者,如果要保留origin遥控器的原始定义,请定义与您的分支相关联的新遥控器(此处称为myrepo):

    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
    
  3. 代替。

答案 1 :(得分:13)

所以,你克隆了某人的回购做出了改变,然后意识到你不能推到那个回购,但你可以推到自己的分支。所以,你继续前进并分叉原始回购。

您所要做的就是将本地克隆中的原始URL与分叉回购的URL交换。

这样做

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

其中https://github.com/fork/name.git是原始仓库中前叉的URL。

之后,只需

git push

您将能够将更改推送到您的分支:)

答案 2 :(得分:7)

好的,我终于编辑了我的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

像魅力一样工作。

或者,感谢Thiago F Macedo answer

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

答案 3 :(得分:1)

如果您使用 SSH 进行身份验证(而不是通过 HTTPS),那么您可以将本地克隆中的源 URL 与分叉存储库的 URL 交换,如下所示:

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

那么简单:

git push

答案 4 :(得分:-4)

您应首先在帐户中克隆分叉回购。

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

您绝对有权推送此回购。如果您想将代码推送到原始仓库,可以发出拉取请求。