こんにちは、AIシステムズです。
この記事は、代表コバが現場で対応してきたGit運用の知見をもとに、AIを活用して構成・執筆し、弊社にて最終チェックを行ったものです。
Gitのマージで「コンフリクトが大量に出て手がつけられない」「マージしたら別の人の変更が消えた」というトラブルは、複数人開発の現場で頻発します。マージ失敗の本当の原因は、操作ミスではなくブランチ運用ルールの曖昧さにあることがほとんどです。
- Gitマージが失敗する主要なパターン
- コンフリクトを最小化するブランチ運用
- マージ事故からの安全なリカバリ手順
- 中小チームでも続けられる運用ルール
- 再発を防ぐためのチェックリスト
目次
- Gitマージで起きる失敗の典型
- 失敗を生む3つの根本原因
- 事故が起きたときのリカバリ
- マージ失敗を減らすブランチ運用
- こういうチームに向いている/向いていない
- 再発防止チェックリスト
Gitマージで起きる失敗の典型
弊社が中小企業の開発支援で対応してきた現場では、マージ失敗は次の3パターンに集約されます。
- 長期間ブランチを切ったまま放置し、本流(main)との差分が膨れ上がってコンフリクトの山になる
- マージコミットの解決時に、別ブランチの変更を誤って削除する側で取り込んでしまう
- force pushで他のメンバーのコミットを上書きして消す
特に3つ目は、「自分のローカルが正しい」と思い込んで git push --force をすると、リモートに先にプッシュされていた他人の作業が静かに消えます。GitHubのreflogから復旧はできますが、気づくのが遅れると手遅れです。
失敗を生む3つの根本原因
1. ブランチが長く生きすぎている
機能ブランチを2週間以上mainから外したまま開発すると、その間にmainが進んで差分が大きくなります。ブランチは「1機能・1週間以内」を目安にmainへ取り込むと、コンフリクトが小さく済みます。
2. mainを取り込む頻度が低い
作業中のブランチに git merge main(または git rebase main)を定期的に行わないと、最後にまとめてマージするときに膨大なコンフリクトに直面します。日次でmainを取り込む習慣にすると、コンフリクトはその日のうちに少量ずつ解消できます。
3. force pushの権限が無制限
mainやdevelopなど共有ブランチへのforce pushを許可していると、事故が起きます。GitHub/GitLabのbranch protectionで main/developへのforce pushを禁止するのが第一歩です。
事故が起きたときのリカバリ
誤ったマージをした直後であれば、reflogからほぼ確実に戻せます。
git reflog
git reset --hard HEAD@{1}
リモートにpush済みの場合は、新しいrevertコミットで打ち消すのが安全です。
git revert -m 1 <マージコミットのSHA>
force pushで上書きしてしまった場合も、GitHubのEvents APIや各メンバーのローカルから失われたコミットを拾えることが多いので、慌てて作業を続けず、まずチームに事故を共有して状況を凍結します。
マージ失敗を減らすブランチ運用
弊社が中小チームに導入してきたルールは次のようなシンプルなものです。
- 機能ブランチは1週間以内にmainへマージ
- 毎朝、自分のブランチに最新のmainを取り込む
- mainへのマージは必ずプルリクエスト経由、レビュー1人以上
- main/developはbranch protectionでforce push禁止
- CIテストが通らないとマージできない設定にする
特別なツールは不要で、GitHub・GitLab・Bitbucketの標準機能で実現できます。「ルールを増やす」よりも「短く・頻繁に・自動で」のほうが定着します。
こういうチームに向いている/向いていない
このマージ運用は、複数人で同時に開発を進めている中小企業の開発チームに直接効きます。一方、1人で開発しているサイトや、月に数回しかコミットしないようなプロジェクトでは、過剰なルールになるため簡略化したほうがよいです。
再発防止チェックリスト
- 機能ブランチは1週間以内にマージできているか
- 作業中ブランチにmainを定期的に取り込んでいるか
- main/developにbranch protectionを設定済みか
- force pushは禁止または特定メンバーのみに制限しているか
- マージ前にCIが通る運用になっているか
- 事故時のreflog・revert手順をチームで共有済みか
まとめ
Gitのマージ失敗は、個々のオペレーションミスではなく、ブランチが長すぎる・取り込み頻度が低い・force pushが自由、という運用設計の問題から生まれます。運用ルールとbranch protectionを最低限整えるだけで、事故の大半は予防できます。
本記事は、代表コバが中小企業の開発現場でGit運用を整えてきた知見をもとに、AIを活用して構成・執筆し、弊社にて最終確認を行っています。Git運用の見直し、CI/CD整備、開発フロー全般の改善について、具体的な状況をふまえた相談を承っています。費用感だけ知りたい方も、お気軽にご相談ください。