
バージョン管理(Part1~Part.11)【Git編】の記事はAmazon kindle Unlimited(電子書籍)での販売となります。howahowablog.comではPart.5/10/11のみ試し読み可能となります。
バージョン管理(Part12~Part.21)【GitHub編(前編)】の記事はAmazon kindle Unlimited(電子書籍)での販売となります。howahowablog.comではPart.15/19のみ試し読み可能となります。
バージョン管理(Part21~Part.30)【GitHub編(後編)】の記事はAmazon kindle Unlimited(電子書籍)での販売となります。howahowablog.comではPart.24/30のみ試し読み可能となります。
「Kindle Unlimited」にご登録の方はキャンペーン価格で電子書籍の購入が可能です。
目標
作成したリモートリポジトリにローカルリポジトリの中身を同期できる
プルリクエストについて概要と操作方法を理解して利用できる
リモートリポジトリを利用した共同開発(Part.2)
リモートリポジトリへローカルリポジトリの内容を同期
リモートリポジトリへローカルリポジトリの内容を同期する手順
今回のように新規のリモートリポジトリにローカルリポジトリの内容を同期する場合や、ローカルリポジトリで変更などを行った後、リモートリポジトリへ内容を同期する時は同期前の準備として次の操作を必ず行う必要があります。
- リモートリポジトリの状態をローカルリポジトリのリモート追跡ブランチに取得する
- 取得した状態をローカルリポジトリのmainブランチとmergeする
- ローカルリポジトリでトピックブランチを作成する
- トピックブランチで作業を行ってコミットまで終わらせる
- ローカルリポジトリの内容をリモートリポジトリに送る
- リモートリポジトリで変更確認の申請を行う
- 承認してリモートリポジトリを最新の状態にする
(今回②の操作はブランチの先祖が其々異なるのでオプションを利用して同期します。)
(③④の操作は共同開発で行うためのフローの一部です。)
リモートリポジトリの状態をローカルリポジトリに取得する
リモートリポジトリへの同期作業を行う前には必ずリモート追跡ブランチを最新の状態にしておく必要があります。差分については自動で確認をしてくれて、変更部分のみ追加してくれる仕組みになっています。


今回の記事では「fetch」+「merge」を行っています。「pull」は行っていません。(結果としては同じになります。)
Gitのブランチを解説するイラストにはブランチの状態目線で描いたものや、ブランチが指し示すもの目線で描いたものがあって混乱することもあると思います。
今回の記事はブランチの状態に目線をおいてイラストを描いています。(mainブランチは「水色」→「水色」→「オレンジ色と水色」、origin/mainブランチ(リモート追跡ブランチ)は「白抜き円」→「オレンジ色」というふうに)
注意点として、pull操作のイラストでmerge(マージ)後のmainブランチがオレンジ色と水色になっていますが、この部分についてmerge(マージ)しているからといってmainブランチとorigin/mainブランチ(リモート追跡ブランチ)が同じものになったというわけではありません。
mainブランチは中身が更新された「オレンジ色と水色」の状態を示すことになるのですが、origin/mainブランチはリモート追跡ブランチとしてオレンジ色の丸から移動していません。
fetch操作(git fetch originコマンド)
git@github.com:howahowablog/howahowaSite.gitをローカルリポジトリのリモート追跡ブランチに取り込みます。

上のコマンドの意味は「origin(リモートリポジトリの住所の別名)の内容をfetch操作でリモート追跡ブランチへ取り込みます。」という意味になります。リモート追跡ブランチは指定しなくて大丈夫です。
取得した状態をローカルリポジトリのmainブランチとmergeする
今回はリモートリポジトリとローカルリポジトリのブランチの先祖がそれぞれ異なっている(作成時それぞれを別の新規として作成)ので通常のmerge作業が行えません。
このような場面では「–allow-unrelated-historiesオプション」を利用します。このオプションを利用することで今回のように別々で作成したブランチのmerge作業を行うことが出来ます。
merge操作(git merge –allow-unrelated-histories origin/main)
git merge –allow-unrelated-histories origin/mainコマンドで先祖の違うブランチをmerge(マージ)します。

ローカルリポジトリでトピックブランチを作成する
リモート追跡ブランチの内容を作業ブランチにmerge(マージ)した後は新規のブランチ(トピックブランチ)を作成してこのトピックブランチ内で編集を行います。
編集が完了(ステージング→コミットの繰り返しで最終的にコミットする)したらトピックブランチをリモートリポジトリへ送ります(push操作)。push操作後はリモートリポジトリに同じ名前のブランチが追加されます(下イラストのオレンジ矢印部分がpush操作の結果)。今回は新しいブランチを「new-project」として作成しています。

以下はpushまでの操作です。
git branch ブランチ名 コマンド
git branch コマンドで新しいブランチを作成します。作成直後は作成の元となったブランチ(今回はmainブランチ)と内容は全く同じとなります。

git branch でブランチの一覧を表示することが出来ます。

ブランチで作業を行ってコミットまで終わらせる
mainブランチでは基本的にファイルの更新作業は行いません。必ずブランチを作成してブランチ側で作業をします。このブログのGitに関する記事の前半では練習としてmainブランチのみでステージングやコミットを行ってきましたが、本来はブランチ(トピックブランチ)を作成して編集更新作業を行います。
トピックブランチは定期的にリモートリポジトリへプッシュしてプルリクエストやレビューを行ってもらいリモートリポジトリ上でmerge(マージ)します。
ローカルリポジトリの内容をリモートリポジトリに送る
新しいブランチ(トピックブランチ)をリモートリポジトリへ送る手順を確認します。
git checkoutコマンドで利用するブランチを「new-projectトピックブランチ」に切り替えておきます。
git checkout ブランチ名 コマンド
利用するブランチを切り替えるコマンドは「git checkout ブランチ名 コマンド」です。

git statusコマンドで状態を確認して「コミットが完了していて、ワーキングツリーがcleanな状態」であることを確認します。

リモートリポジトリへ「new-projectブランチ」をpush(プッシュ)します。この操作でリモートリポジトリ上でのプルリクエストの作成が可能になります。

GitHubのトップページを確認すると「Compare & pull request」のボタンが表示されています。このボタンは一定の時間が過ぎると表示されなくなります。表示が消えていたら「Pull request」タブから確認をすることが出来ます。

リモートリポジトリで変更確認の申請を行う
ブランチをpush(プッシュ)したらリモートリポジトリに変更を加えたい旨の申請を行います。これがプルリクエストです。プルリクエストを行うとレビューが行われて問題なければmerge(マージ)となります。
「Compare & pull request」をクリックしてプルリクエストを行います。「Compare & pull request」をクリックすると次の画面へ遷移します。

設定・入力の項目は次のようになっています。

base:リモートリポジトリのマージ先です。
今回はmainを選択しています。
compare:push(プッシュ)したトピックブランチを選択します。
今回はnew-projectブランチを選択しています。
タイトル:プルリクエストのタイトルを入力します。
Write:プルリクエストの概要を入力します。
プルリクエストが完了すると次のような画面に遷移します。(この時点ではまだmerge(マージ)は行われません。)


承認してリモートリポジトリを最新の状態にする(同期)
「Merge pull request」をクリックして「トピックブランチ」を「メインブランチ」にmerge(マージ)します。

確認画面が表示されるので問題なければ「Comfirm merge」をクリックします。

GitHubではボタンクリックのみでmerge(マージ)が行えます。次のように画面が変化していればmerge(マージ)が完了しています。

GitHubの「howahowaSite」のページに移動すると中身が次のようになっています。

今回は以上になります。

ブックマークのすすめ
「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。

