GitHubでブランチをマージすることは、複数の人(あるいは単に異なる機能に取り組んでいる人)が協力する必要がある場合に不可欠です。初めて使う場合、特に競合が発生したり、コマンドラインから実行しようとしてどのコマンドが重要かよくわからなかったりすると、少し戸惑うかもしれません。このガイドは、ウェブサイト上でクリックして操作する方が好きでも、ターミナルにコマンドを入力して操作する方が好きでも、きっと役立つでしょう。このガイドを使えば、コードの変更をスムーズに統合し、プロジェクトを整理整頓した状態に保つことができます。他の人の作業を誤って上書きしたり、マージ地獄に陥ったりすることもありません。
GitHub でブランチをマージする方法は?
方法1: GitHubウェブサイトとの統合
ターミナルコマンドをいちいち操作したくない人にとって、これは最も簡単な方法です。視覚的で分かりやすく、Redditでも使いやすいです。さらに、ブラウザから直接操作できるので、設定も不要です。
- ブランチが存在する GitHub 上のリポジトリを開きます。
- リポジトリ ページの上部にある[Pull request]タブをクリックします。
- 「新しいプルリクエスト」をクリックします。
- ベースブランチ(おそらくメインまたはマスター)を選択し、マージしたいフィーチャーブランチ(例えばfeature-xyz)と比較します。どちらがベースブランチか分からない場合は、通常は明確にラベル付けされています。
- マージされる変更点を確認してください。特に最近多くの更新があった場合は、念のため二重チェックすることをお勧めします。
- 「プルリクエストを作成」をクリックします。簡単なタイトルと、このマージで何が行われるかについてのメモを追加します(もちろん、GitHub ではそうすることが求められます)。
- すべて問題がなければ、「プル リクエストをマージ」ボタンをクリックします。
- 「マージを確認」をクリックしてマージを確定します。これで完了です。ブランチはマージ先の一部になります。
その前後を問わず、多くの人はリポジトリを自分のマシンにローカルにクローンして直接コードを修正し、準備ができたらプッシュし直します。これは、本格的な開発者にとってはより自然なやり方でしょう。
方法2: コマンドライン経由でマージする
ここで、Git Bash、ターミナル、PowerShell を使って少し手作業を行う人もいます。慣れてしまえば作業が早くなりますし、自動化や CI/CD パイプラインの構築などでは、これが唯一の方法になることもあります。
- ターミナルまたは Git Bash を開きます。
- を使用してローカル リポジトリ フォルダーに移動します
cd /path/to/your/repo
。 - メインブランチにいることを確認してください:
git checkout main
。メインブランチの名前が master などの場合は、それに応じて置き換えてください。 - origin から最新の変更をプルします:
git pull origin main
。 - 機能ブランチをマージします: 。をブランチの名前に
git merge feature-branch
置き換えます。feature-branch
- 競合がない場合、結合したコードをプッシュバックできます
git push origin main
。
競合が発生した場合は、それらのファイルを開き、どの行を残すかを解決し、git add
解決したファイルに対して を実行し、最後にgit commit
マージを完了する必要があります。競合は厄介ですが、対処可能です。場合によっては、手動で簡単に編集するだけで解決できることもあります。ちなみに、設定によっては、競合が発生するはずがないのに発生することがあります。これはちょっと奇妙ですが、リセットやリベースを行うことで改善されることがあります。
マージ競合の処理
2つのブランチで同じコード行が変更されると、競合が発生します。Gitがどちらを残すべきか判断できない場合は、そのセクションにマークが付けられ、ユーザーはどちらかを判断する必要があります。
- Gitはマージを試みた後、競合しているファイルにフラグを立てます。通常、どのファイルを修正する必要があるかが表示されます。
- これらのファイルをコードエディタで開きます。<<<<<<<、=======、>>>>>>> でマークされたセクションに注目してください。これは Git が競合箇所を教えてくれるものです。
- 保持する変更を決定し、競合マーカーを削除して保存します。
- 実行して
git add.
解決されたファイルをステージングします。 - 最後に
git commit
、このコミット中に、競合の解決に関するメッセージを追加することもできます。 - 変更をリモートにプッシュします:
git push origin main
。
このプロセスは、最初の数回は特に予期せぬ競合が発生したり、複雑なマージ中に競合が発生したりすると、イライラするかもしれません。しかし、数回繰り返すうちに煩わしさは軽減され、競合を早期に発見できるようになります。
合併が重要な理由
基本的に、マージはすべての作業を同期させます。これにより、全員が最新のコードで作業していることが保証され、作業の重複が防止され、異なるバージョンが入り乱れて混乱状態になるのを防ぐことができます。
よくある質問
GitHub Desktop を開き、ベースブランチ(メインブランチなど)に切り替えます。「ブランチ > 現在のブランチにマージ」 をクリックし、機能ブランチを選択します。慣れてしまえばとても簡単です。
はい、最近のものなら、git resetのようにしgit reset --hard HEAD~1
て最後のマージを取り消すことができます。古いバージョンやプッシュ済みのバージョンの場合は、revert する必要があるかもしれません。少しリスクがあるので、不安な場合はバックアップを取っておいてください。
マージは発生した時点の履歴を保持し、すべてのブランチをそのまま表示しますが、リベースは履歴を線形フローに書き換えます。リベースはよりクリーンな操作ですが、注意しないと扱いが難しくなります。
プロジェクトによって異なります。ほとんどの共有リポジトリでは、メインブランチまたは本番ブランチにマージするには書き込み権限またはメンテナ権限が必要です。権限がない場合は、プルリクエストを開いて承認を待つ必要があります。
まとめ
ブランチのマージは、GitHub を使う上で重要な部分です。ボタンをクリックする場合でも、コマンドを入力する場合でも、重要なのは変更内容を二重に確認し、競合を慎重に解決し、履歴を整理しておくことです。完璧にはいかないこともありますが、それも学習の一環です。チームで作業している場合は、適切なマージを行うことですべてがスムーズに進み、疑問点ややり直しを減らすことができます。競合が発生したらすぐに注意を払うだけで、リポジトリは健全な状態を保てます。