web-dev-qa-db-ja.com

オリジナルからフォークを再同期する方法

Githubでプロジェクトをforkしました。変更を加え、プルリクエストを送信しました。オーナーは私のフォークをメインプロジェクトにマージし、その後いくつかの変更を加えました。したがって、今のところ、私のフォークはメインプロジェクトで更新されていません。私のプルリクエストをマージした後、彼が行った変更がありません。メインプロジェクトでフォークを更新するにはどうすればよいですか? Webインターフェイスでそれを行う方法はありますか?

ありがとう

34
bAN

設計上、プロジェクトをフォークすると、元のリポジトリが変更されても更新されない別のリポジトリが作成されます。ただし、gitを使用すると、手動で簡単に更新できます。

3番目のリポジトリの助けが必要です(ローカルコピーで十分です)。 3つのリポジトリがあります。

  • 「アップストリーム」:Github上のアップストリームプロジェクトのリポジトリ。
  • "Origin":Github上のフォークのリポジトリ
  • 「ローカル」:コンピューター上のローカルリポジトリ。 git clone [email protected]:your-username/projectname.gitを使用してForkを複製して作成し、全員がブランチmasterを使用していると想定します。

現在「Origin」と「Local」が同じ状態にあり、「Upstream」が1つ以上のコミット(マージとその後の変更)より進んでいると想定します。

最初に上流プロジェクトを Gitリモート として追加します。

git remote add upstream https://github.com/upstream-username/projectname.git

次に、fetchをプルし、次にmergeを自動的に変更します。リモートのmasterブランチからローカルリポジトリの現在の(master)ブランチ:

git pull upstream master

これで、ローカルリポジトリがupstreamと同期しました。最後に、ローカルリポジトリをGithubフォークにプッシュします。

git Push Origin master

これですべてが同期されました。

38

リモートを追加し( GitHubヘルプ を参照)、その新しいリモートからプルする必要があります。

git remote add mainProject https://github.com/user/mainProject
git pull mainProject master
1
VonC

私は this answer を見つけて、元の回答を補足します。これは、1つのブランチ(マスター)の同期のみを扱うためです。さらに、ブランチがアップストリームでフォーク以降に作成されている場合、フォークでブランチを作成することは少し複雑です。

簡単に言えば、上流のリポジトリのすべてのブランチでフォークを更新するには、次のコマンドを実行します。

for branch in $(git ls-remote --heads upstream|sed 's#^.*refs/heads/##'); do git Push Origin refs/remotes/upstream/$branch:refs/heads/$branch; done

これが行わないことは、上流から削除された分岐をフォークから削除することです。特にフォークにブランチを作成している場合は、これを自動化する方法はありません。

0
Brian