はじめに
私は個人開発ではGit、Githubを使っていますが、チーム開発ではGit、Githubを使ったことがほとんどなく、コンフリクトに遭遇したこともありません。Gitの知識はチーム開発をする上では必須の知識であるため、もっと学びたいと考え、サポーターズ主催の勉強会「チーム開発でコンフリクトしないためのGit・GitHubの使い方」に参加させていただきました。そこでの学びをここに記します。
Gitとは
バージョン管理システムの一つです。
分散型のシステムで、個人のPCで完結し、他の人に影響を及ぼさずに変更ができます。
Gitのブランチ
ブランチとは、プロジェクト内で並行して作業を進めるための分岐点であり、他の作業に影響を与えず作業することができます。
「メインブランチ」と「作業ブランチ」があり、メインブランチにはmasterやmainというブランチ名が使われます。
作業ブランチには好きな名前をつけられますが、同じ名前のブランチは同時に一つしかつくれません。
作業ブランチで作業したものはメインブランチにマージされるように開発をするのが一般的です。
GitのHEAD
HEADとは、現在の作業場所を指すポインタであり、「今自分がどこで作業しているか」を表します。
HEADがmainブランチを指しているなら、全てのコミットはmainブランチに対して行われます。
HEADが指す場所は「ブランチ」と「コミット」の2種類あります。
HEADが「ブランチ」を指しているとき、最新のコミットがHEADになります。
HEADが「コミット」を指しているとき、デタッチHEAD状態と呼びます。HEADは直接コミットを指しているため、どのブランチにも属していない状態となります。
Gitのコンフリクト
コンフリクトとは、2つのブランチをマージしたとき変更が衝突することです。
Gitは衝突したどちらの変更を残すべきか自動的に判定できないため、人間が手動でコンフリクトを解消させる必要があります。
コンフリクトしないためには、「リモートリポジトリ」と「ローカルリポジトリ」の「HEAD」を意識して開発する必要があります。
開発中にHEADがどのブランチを指しているかを常に確認することが重要です。
誤ったブランチで作業をすると、後で意図しないコミットが他のブランチに含まれてしまいます。
また、他の人の作業をローカルリポジトリに取り組むことも重要です。最新のリモートブランチとローカルブランチのHEADを合わせないまま開発をすると、変更履歴がずれてしまいます。
Gitでコンフリクトした時に困らないためには、コミットを小さく保つことが重要です。
そうすることで、もしコンフリクトしても解決が簡単になります。
また、マージもなるべく小さな単位でするといいです。
Githubのプルリクエスト
プルリクエストの概要欄には、概要や変更内容、テスト内容などを記入します。
リクエストを受けたチームメンバーはコードレビューをします。コメントをするとその内容が表示されます。コメントに対しては返信もできます。
問題がなければプルリクエストをマージします。
プルリクエストを使うとどんな変更があったかを記録に残せます。また、コードレビューしてからマージできます。