バージョン管理【Git と GitHub】まとめ|現役エンジニア&プログラミングスクール講師「Git」と「GitHub」のまとめページです。Git、GitHubに関する記事を時系列でまとめています。まとめページの下部には「おすすめの学習書籍」「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中。...

バージョン管理(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」にご登録の方はキャンペーン価格で電子書籍の購入が可能です。

「Kindle Unlimited」の
無料トライアルはこちら

目標

作成したリモートリポジトリにローカルリポジトリの中身を同期できる
プルリクエストについて概要と操作方法を理解して利用できる

リモートリポジトリを利用した共同開発(Part.2)

リモートリポジトリへローカルリポジトリの内容を同期

リモートリポジトリへローカルリポジトリの内容を同期する手順

今回のように新規のリモートリポジトリにローカルリポジトリの内容を同期する場合や、ローカルリポジトリで変更などを行った後、リモートリポジトリへ内容を同期する時は同期前の準備として次の操作を必ず行う必要があります。

  1. リモートリポジトリの状態をローカルリポジトリのリモート追跡ブランチに取得する
  2. 取得した状態をローカルリポジトリのmainブランチとmergeする
  3. ローカルリポジトリでトピックブランチを作成する
  4. トピックブランチで作業を行ってコミットまで終わらせる
  5. ローカルリポジトリの内容をリモートリポジトリに送る
  6. リモートリポジトリで変更確認の申請を行う
  7. 承認してリモートリポジトリを最新の状態にする

(今回②の操作はブランチの先祖が其々異なるのでオプションを利用して同期します。)

(③④の操作は共同開発で行うためのフローの一部です。)

重要な用語:リモート追跡ブランチ…リモート追跡ブランチはリモートリポジトリの最新の状態を取得するためのローカルリポジトリ側のブランチです。このブランチの状態がリモートリポジトリの最新の状態と同じでない場合は再取得する必要があります。

重要な用語:トピックブランチ…編集作業に利用するブランチのことをいいます。トピックブランチはひとつの機能ごとにひとつ作成して利用します。

リモートリポジトリの状態をローカルリポジトリに取得する

リモートリポジトリへの同期作業を行う前には必ずリモート追跡ブランチを最新の状態にしておく必要があります。差分については自動で確認をしてくれて、変更部分のみ追加してくれる仕組みになっています。

リモート追跡ブランチを最新の状態にする操作には「fetch(フェッチ)」と「pull(プル)」があります。

fetch(フェッチ)はリモート追跡ブランチの更新をするのみです。

pull(プル)はリモート追跡ブランチを最新にして更に作業ブランチにmerge(マージ)をしてくれます。

今回の記事では「fetch」+「merge」を行っています。「pull」は行っていません。(結果としては同じになります。)

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操作でリモート追跡ブランチへ取り込みます。」という意味になります。リモート追跡ブランチは指定しなくて大丈夫です。

ローカルリポジトリからリモートリポジトリへ内容を送る前に必ずリモートリポジトリの内容をリモート追跡ブランチに取り込む必要があります。取り込み前に内容を送る(push操作といいます)と拒否されます。

取得した状態をローカルリポジトリの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(マージ)します。

共同開発ではローカルリポジトリのmainブランチを利用したmerge(マージ)は行いません。

ローカルリポジトリではトピックブランチをコミットした後、リモートリポジトリへpush(プッシュ)します。その後、プルリクエストを行ってレビューを行ってもらいます。

全てのレビューが完了して問題がなければメンバーが認識できる場面でmerge(マージ)します。

ローカルリポジトリの内容をリモートリポジトリに送る

新しいブランチ(トピックブランチ)をリモートリポジトリへ送る手順を確認します。
git checkoutコマンドで利用するブランチを「new-projectトピックブランチ」に切り替えておきます。

実際の開発では、ここから編集作業が入りますが、今回は編集を行わないのでこのままpush作業へ移ります。push(プッシュ)作業を行うときはpush(プッシュ)するブランチに必ず移動しておきます。(git checkoutコマンドの利用)

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」のページに移動すると中身が次のようになっています。

今回は以上になります。

「Git・GitHub」おすすめ書籍6選+α【初心者用4冊&実践用2冊&番外編1冊】| 現役エンジニア&プログラミングスクール講師「Git・GitHub」初心者の方がGitの操作を理解するためのお勧めの書籍について取り上げています。また中級者の方が更に進んだ学習ができる実践的な書籍についてお勧めできる2冊を取り上げています。ページの下部には「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中。...

ブックマークのすすめ

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

「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】について解説している記事です。削除方法も掲載しています。...
【パソコン選び】失敗しないための重要ポイント | 現役エンジニア&プログラミングスクール講師【パソコン選び】失敗しないための重要ポイントについての記事です。パソコンのタイプと購入時に検討すべき点・家電量販店で見かけるCPUの見方・購入者が必要とするメモリ容量・HDDとSSDについて・ディスプレイの種類・バッテリーの持ち時間や保証・Officeソフト・ウィルス対策ソフトについて書いています。...