Git 上流リポジトリの更新を同期する#
Github テンプレートを使用して自分のリポジトリを作成しましたが、パッチの更新を同期する必要があります。手動で書き写すわけにはいきませんので、解決策を探しました。
記録しておきます。
上流リポジトリを追加する#
上流リポジトリに名前を付けます。upstream
と名付ける場合は、ローカルリポジトリで以下のコマンドを実行します:
git remote add upstream https://github.com/$<upstream-repo>.git
上流リポジトリの変更を取得する#
以下のコマンドを実行して、上流リポジトリのすべてのブランチとコミットを取得します:
git fetch upstream
上流の変更をマージする#
今、上流の main ブランチの変更をあなたのローカル main ブランチにマージします:
git merge upstream/main --allow-unrelated-histories
特定のコミットだけをマージする必要がある場合:
git cherry-pick <commit-hash>
次のように使用することもできます:
gcp <commit-hash>
commit-hash は GitHub のウェブページから直接コピーできます。
この時、コミットの作者は元のリポジトリの作者で、Vercel がビルド失敗を通知し、Pro にアップグレードする必要があると言っています。別のファイルを修正して、自分でコミットを追加できます。
もちろん、これはあまり優雅ではありませんが、以下のコマンドを使用してファイルに変更を取得できますが、コミットはしません:
git cherry-pick <commit-hash> --no-commit
その後、手動でコミットします:
git commit -m "commit information"
コンフリクトを解決する#
自分がソースコードをすでに変更している場合、マージ中にコンフリクトが発生する可能性があります。手動で解決する必要があります。
Git も通知を行い、コンフリクトファイルを手動で編集して保存し、その後変更をコミットします。
バッチコミット#
git cherry-pick <開始コミット>^..<終了コミット>
コンフリクトがある場合は順番に処理され、その後、continue
を実行して終了まで続けます:
git cherry-pick --continue
-
<開始コミット>
:範囲の開始点(このコミットは含まれません。<開始コミット>~
または<開始コミット>^
を使用しない限り)。 -
<終了コミット>
:範囲の終了点(このコミットは含まれます)。 -
^
は Git の構文で、「前のコミット」を指定するために使用されます。 -
..
は範囲を示します。
プッシュ#
git push origin main
もちろん、デフォルトでは新しく追加された upstream
にはプッシュされませんので、直接 git push
すれば大丈夫です。
もはや同期が必要ない場合は、上流のリポジトリを削除できます:
git remote remove upstream