元のレポのクローンからフォークにプッシュするにはどうすればよいですか?


122

GitHub 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書き込みアクセス権のないにではなく、フォークにプッシュするにはどうすればよいですか?

回答:


187

デフォルトでは、リポジトリを複製するとき

  • その時存在https://github.com/original/orirepo.git
  • 現在のブランチはと呼ばれmaster

その後

  • 結果のクローンのローカル構成には、と呼ばれるリモートが1つだけリスト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 pushpushするmyrepoように伝えたい場合originは、

    git push -u myrepo master
    

代わりに。


「git push -u」は「git pull」のデフォルトの動作も変更しますか?
ベンロス2017年

1
はい。そうなるため、「push -u」を実行する代わりに、pushDefaultオプションを使用する必要があります。
マリウスK

1
DID git remote set-url origin http://github.com/myname/reponame、その後git push origin mybranch。働きました!ありがとうございました!
開発者MariusŽilėnas2017

1
リモートの追加を使用する場合、プルにどのように影響しますか?それはどこから引き出すのですか?2つのリポジトリ間の将来のマージはどのように処理されますか?
Kok How Teh 2018年

1
@KokHowTeh別のリモートを追加しても、ローカルブランチが追跡するリモートブランチ(存在する場合)は影響を受けません。ただし、git push -u myrepo masterローカルマスターがトラッキングを開始しmyrepo/masterます。その後、git pullマスターで実行している場合、からプルしmyrepo、からプルしなくなりoriginます。
jub0bs 2018年

17

したがって、誰かのレポを複製して変更を加えたところ、そのレポにプッシュすることはできないが、自分のフォークにプッシュすることができることに気付きました。それで、先に進んで元のレポをフォークしました。

ローカルクローンの元のURLをフォークされたリポジトリのURLと交換するだけです。

このようにしてください

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

どこ https://github.com/fork/name.git元のリポジトリからのフォークのURLはにあります。

その後、ちょうど

git push

変更をフォークにプッシュできます:)


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の回答のおかげで:

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

-5

最初に、フォークしたリポジトリをアカウントに複製する必要があります。

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

このリポジトリにpushする権限が絶対にあります。コードを元のリポジトリにプッシュしたい場合は、プルリクエストを発行できます。


彼らはフォークをクローンするように求めていません。親切に、もう一度質問を読んでください。
Ahmad Awais
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.