概要
オープンソースへコミット(Commit)する時、会社がソースコードをGitHubで管理してる時、私たちはForkを使って当該リポジトリ(Repository)を自分のリポジトリで持ってきます。このように持ってきたリポジトリのCloneして修正した後、原本リポジトリへPull Requestを送ってMergeすることでソースコードを管理します。
しかし、オープンソすや会社のソースコードは一人だけ使ってないので、私がForkした時点の原本リポジトリのMasterとPull Requestを送る現時点の原本Masterには差があります。
このブログポストではこのように差が発生した場合、原本リポジトリのMasterとForkしたリポジトリのMasterを同期化する方法について説明します。
原本リポジトリ追加
原本リポジトリとForkしたリポジトリを同期化(Sync)するためにはまず、原本リポジトリをローカル環境のリモートアドレスへ追加する必要があります。
下記のコマンドを実行して現在追加されたリモートアドレスを確認します。
git remote -v
上のコマンドを実行すると下記のような結果が確認できます。
origin https://github.com/USER_NAME/FORK_REPOSITORY.git (fetch)
origin https://github.com/USER_NAME/FORK_REPOSITORY.git (push)
ローカルは当然にForkしたリポジトリをCloneしたので、上のような結果が確認できます。次は下記のコマンドを使って原本リポジトリをローカルのリモートアドレスへ追加します。
git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git
普通はupstream
という名前で原本リポジトリを追加しますが、ただの名前なので他の名前にしても大丈夫です。
git remote add test https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git
ここではupstream
と言う名前で進めます。下記のコマンドを実行して原本リポジトリがうまく追加されたか確認します。
git remote -v
問題なく追加されたら下記のような結果が確認できます。
origin https://github.com/USER_NAME/FORK_REPOSITORY.git (fetch)
origin https://github.com/USER_NAME/FORK_REPOSITORY.git (push)
upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (fetch)
upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (push)
原本リポジトリの内容を取ってくる
ローカルのリモートアドレスへ原本のリポジトリを追加しました。次はFetch
を使ってリモートのリポジトリの内容をローカルへ取ってきます。
下記のコマンドを実行してリモートリポジトリの内容を取ってきます。
git fetch upstream master
Rebase
現在ローカルのMasterブランチはForkしたリポジトリをCloneしたので、ForkしたリポジトリのMasterブランチをBaseにしてます。次はRebase
を使ってローカルのMasterブランチがFetch
で取ってきた原本リポジトリのMasterブランチをBaseにするように変更します。
下記のコマンドを使ってローカルのMasterブランチのBaseを原本リポジトリのMasterブランチで変更します。
git rebase upstream/master
今、ローカルのMasterブランチのBaseは原本リポジトリのMasterブランチになりました。
Forkブランチ同期化
Rebasewo使って現在ローカルのMaserブランチは原本リポジトリのMasterブランチで変更された状態です。次は、Forkしたリモートリポジトリも原本リポジトリのMasterブランチで変更する必要があります。
下記のコマンドを使ってForkしたリモートリポジトリのMasterブランチを原本リポジトリのMasterブランチで同期化します。
git push origin master -f
完了
業務中で、オープンソースのコミットする時、このように時々リポジトリを同期化することがあります。皆さんもRebasewo使ってForkしたリポジトリを同期化してみてください。
私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!
アプリ広報
Deku
が開発したアプリを使ってみてください。Deku
が開発したアプリはFlutterで開発されています。興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。