ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
gitのマージ中にコンフリクト(競合)が発生したら、git mergetool コマンドを実行することで、設定した差分・マージ専用ツールを起動し、左右の変更を見比べながらコンフリクトを解決できる。マージツールを使えば、手作業でコンフリクトマーカーを削除するよりも安全かつ直感的に統合作業を進められる。
| この記事の要点 |
|---|
|
マージコンフリクトとは
マージコンフリクト(競合)は、2つのブランチで同じファイルの同じ箇所がそれぞれ別々に変更されたとき、gitがどちらを採用すべきか自動判断できずに発生する。git merge や git rebase、git pull の途中で起こることが多い。
コンフリクトが起きると、gitは該当ファイルにコンフリクトマーカーを書き込み、マージ作業を一時停止する。利用者はそのファイルを編集して「最終的にどの内容を残すか」を決め、解決した旨をgitに伝える必要がある。この解決作業を支援するのが git mergetool である。
git mergetool の起動
コンフリクトが発生した状態で、リポジトリ内で次のコマンドを実行する。引数なしで実行すると、未解決のコンフリクトを含むすべてのファイルが順番にツールで開かれる。
|
git mergetool |
特定のファイルだけを解決したい場合は、ファイル名を引数に指定する。
|
git mergetool path/to/file.txt |
その場限りで使うツールを変えたい場合は、--tool オプションで上書きできる。
|
git mergetool --tool=meld |
使うツールの設定
git mergetool は、設定された外部ツールを呼び出すための「ランチャー」に過ぎない。どのツールを使うかは merge.tool 設定で指定する。--global を付けると全リポジトリ共通の設定になる。
|
git config --global merge.tool <name> |
<name> には使用するツール名(例: vimdiff、meld、vscode 等)を入れる。設定例を以下に示す。
vimdiff(ターミナルのみで完結):
|
git config --global merge.tool vimdiff |
Meld(GUIの差分・マージツール):
|
git config --global merge.tool meld |
Visual Studio Code: 新しめのVS Codeでは、git側のツール名 vscode に対応している。古い環境やうまく動かない場合は、起動コマンドを明示する方法を使う。
|
git config --global merge.tool vscode git config --global mergetool.vscode.cmd "code --wait --merge $REMOTE $LOCAL $BASE $MERGED" |
使用可能なツール名の一覧は、次のコマンドで確認できる。環境にインストール済みのツールと、まだ使えるよう設定が必要なツールが表示される。
|
git mergetool --tool-help |
実際の解決フロー
マージツールを使った典型的な解決手順は次の通り。
1. コンフリクトの発生。 マージなどを実行するとコンフリクトが報告される。
|
$ git merge feature Auto-merging app.js CONFLICT (content): Merge conflict in app.js Automatic merge failed; fix conflicts and then commit the result. |
2. 状況の確認。 git status で、どのファイルが未解決(Unmerged)かを把握する。
|
git status |
3. マージツールの起動。 git mergetool を実行すると、未解決ファイルが1つずつツールで開かれる。多くのGUIツールでは、画面が3〜4ペインに分かれ、自分側(LOCAL)・相手側(REMOTE)・共通の祖先(BASE)・結果(MERGED)を見比べながら統合できる。
|
git mergetool |
4. 保存して終了。 ツール上で最終的な内容を確定し、保存して終了する。git mergetool は、ツールが正常終了するとそのファイルを自動的に解決済みとして扱う(git add 相当の処理が行われる)ため、解決済みファイルに対して改めて git add を打つ必要は基本的にない。
5. .orig の扱い。 初期設定のままだと、解決したファイルの隣に ファイル名.orig というバックアップが残る。これはコミットすべきものではないので削除する。後述の設定で自動生成自体を止められる。
|
git clean -i # 不要ファイルを対話的に削除(.orig含む) |
6. マージの完了。 すべてのコンフリクトを解決したら、git status で未解決が残っていないことを確認し、コミットしてマージを確定する。
|
git commit |
コンフリクトマーカーの見方
マージツールを使わず手作業で解決する場合や、ツールがマーカー付きファイルを表示する場合に備えて、コンフリクトマーカーの読み方を押さえておく。コンフリクトが起きたファイルには、次のような記号が挿入される。
|
<<<<<<< HEAD 現在のブランチ(自分側)の内容 ======= マージしようとしている相手側の内容 >>>>>>> feature |
- <<<<<<< HEAD ~ ======= の間が、現在チェックアウト中のブランチ(自分側 / LOCAL)の変更。
- ======= ~ >>>>>>> の間が、マージしてくる相手側(REMOTE)の変更。
>>>>>>>の後ろにはブランチ名やコミットIDが付く。 - 手作業の場合、最終的に残す内容を決めて、3種類のマーカー行(
<<<<<<</=======/>>>>>>>)をすべて削除する。マーカーの消し忘れはバグの原因になる。
共通の祖先(BASE)も表示する diff3 スタイルを設定しておくと、「もとは何だったか」が分かり判断しやすくなる。
|
git config --global merge.conflictStyle diff3 |
主なマージツール比較
| ツール名 | 種別 | 対応OS | 特徴 |
|---|---|---|---|
| vimdiff | CUI | Win / Mac / Linux | Vim内蔵。追加インストール不要で、サーバー上でも使える。操作にVimの知識が必要。 |
| Meld | GUI | Win / Mac / Linux | 3ペイン表示が見やすい定番の無料ツール。直感的で初心者にも扱いやすい。 |
| VS Code | GUI | Win / Mac / Linux | 普段のエディタをそのまま利用可能。3-way Merge Editorで競合をボタン操作で取り込める。 |
| KDiff3 | GUI | Win / Mac / Linux | 3-way比較に強く、自動マージ機能が優秀。やや画面情報量が多い。 |
| Beyond Compare | GUI | Win / Mac / Linux | 高機能な有償ツール。大きなファイルやフォルダ単位の比較に強い。 |
落とし穴・注意点
| よくあるトラブルと対策 |
|---|
|
よくある質問(FAQ)
Q. git mergetool を実行しても何も起きません。
A. 未解決のコンフリクトが存在しない場合、何も起動せず終了する。まず git status でUnmergedファイルがあるかを確認する。コンフリクトがあるのに起動しない場合は、merge.tool の設定漏れかツール未インストールが原因なので、git mergetool --tool-help で対応状況を確認する。
Q. マージツールを使わずに解決してもよいですか。
A. 問題ない。コンフリクトの内容が単純なら、ファイルを直接エディタで開いてマーカーを編集し、git add → git commit でも解決できる。git mergetool は、3つの内容を見比べたい場合や競合が複雑な場合に特に有効である。
Q. 解決の途中でやり直したくなりました。
A. マージ作業全体を取りやめてよいなら git merge --abort でマージ前に戻せる。特定ファイルだけ最初のコンフリクト状態に戻したい場合は git checkout --merge <file> を使う。
Q. .orig ファイルはコミットすべきですか。
A. しない。*.orig はマージツールが作るバックアップであり、リポジトリに含めるべきではない。削除するか、mergetool.keepBackup false で生成自体を止める。誤ってコミットしないよう .gitignore に *.orig を追加しておくとよい。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- 用語一覧
- エラー一覧
- git本体のインストール(Linux)
- Linuxサーバーへのgit導入とクライアントのセットアップ
- リモートリポジトリをローカルリポジトリとしてクローンする方法
- リモートとローカルのリポジトリを同期(pull)する方法
- 設定の確認
- gitユーザー名とemailの設定
- リモートリポジトリの作成
- ローカルリポジトリの作成
- 新規ファイル/ディレクトリをインデックスに登録
- インデックスの登録状態を確認
- ローカルリポジトリの変更をコミット
- コミット履歴の確認
- クライアントからリモートリポジトリの接続設定、確認、削除
- リポジトリへのプッシュ
- リモートリポジトリからクライアントへのSSHクローン
- リモートとローカルの差分表示
- バージョンの確認
- プロキシの設定
- ローカルをリモートリポジトリの状態に戻す
- ブランチの作成, 一覧表示, 切り替え
- ブランチのマージと削除
- リベース
- .gitignoreの書き方
- .gitignoreの設定が反映されない場合
- 特定のファイルをgitの管理から外す方法
- 参照(ORIG_HEAD, HEAD, FETCH_HEAD)
- git rm [-r --cached] の取り消し
- 一部のディレクトリ/ファイルのみをリポジトリから復元する方法
- ローカルとリモートリポジトリの有無を同期
- pushの取消し方法
- マージツールの起動方法
- Gitで「MERGING」の状態
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?