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

Rém*_*ras 107 git github

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

git clone https://github.com/original/orirepo.git
Run Code Online (Sandbox Code Playgroud)

我修改了大约20个文件,然后我上演了我的更改并提交了一个提交

git add
git commit
Run Code Online (Sandbox Code Playgroud)

但是,当我试图推动时

git push
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

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
Run Code Online (Sandbox Code Playgroud)

我知道我犯了一个错误:我应该克隆我的叉子而不是orirepo,但现在已经太迟了.我怎么能推到我的叉子而不是origin/orirepo我没有写入权限?

jub*_*0bs 166

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

  • 居住在https://github.com/original/orirepo.git,
  • 其当前分支被调用master,

然后

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

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

git push
Run Code Online (Sandbox Code Playgroud)

git push origin master:origin/master
Run Code Online (Sandbox Code Playgroud)

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

你需要

  1. 通过运行重新定义origin与您的分支相关联的遥控器

    git remote set-url origin https://github.com/RemiB/myrepo.git
    
    Run Code Online (Sandbox Code Playgroud)
  2. 或者,如果要保留origin远程的原始定义,请定义myrepo与fork关联的新远程(此处称为):

    git remote add myrepo https://github.com/RemiB/myrepo.git
    
    Run Code Online (Sandbox Code Playgroud)

    然后你应该能够master通过运行将你的本地分支推送到你的分支

    git push myrepo master
    
    Run Code Online (Sandbox Code Playgroud)

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

    git push -u myrepo master
    
    Run Code Online (Sandbox Code Playgroud)

代替.

  • 是的,它会,所以不要做“push -u”,你应该使用 pushDefault 选项: git config --add remote.origin.pushdefault myrepo 它只会影响推送,并适用于所有现有的新分支。 (2认同)
  • 做了`git remote set-url origin http://github.com/myname/reponame` 然后是`git push origin mybranch`。工作了!谢谢! (2认同)

Ahm*_*ais 14

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

您所要做的就是将本地克隆中的原始URL与forked repo的URL交换.

像这样做

git remote set-url origin https://github.com/fork/name.git
Run Code Online (Sandbox Code Playgroud)

https://github.com/fork/name.git原始仓库中您的前叉的URL 在哪里.

在那之后,只是

git push
Run Code Online (Sandbox Code Playgroud)

并且你将能够将你的更改推送到你的前叉:)


Rém*_*ras 7

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

$ nano .git/config
Run Code Online (Sandbox Code Playgroud)

改变:

[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
Run Code Online (Sandbox Code Playgroud)

[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
Run Code Online (Sandbox Code Playgroud)

然后,

$ git push
Run Code Online (Sandbox Code Playgroud)

工作就像一个魅力.

或者,感谢Thiago F Macedo回答:

git remote set-url origin https://yourusername@github.com/user/repo.git
Run Code Online (Sandbox Code Playgroud)