Preview ng leksyon

マージコンフリクト:慌てずに理解して解決する

コンフリクトは初心者を怖がらせますが、このセクションを終えると落ち着いて対処できるようになります。コンフリクトが発生する理由(Gitは心が読めないので、どの変更がより重要かを判断できません)、コンフリクトマーカーの読み方、適切な解決方法の選び方を解説します。手動での解決とマージツールの使用という2つのアプローチを紹介します。

マージコンフリクト コンフリクトマーカー コンフリクト解決
Ano ang matututunan mo sa leksyong ito
  • マージコンフリクトの本質を理解し、恐れずに予測可能なものとして扱えるようになります。
  • Gitのマーカーを正しく読み取り、手動でコンフリクトを解決できるようになります。
  • エディタでマージツールを設定し、視覚的にコンフリクトを解決する方法を学びます。

Simula ng leksyon

3種類のマージコンフリクト

  • コンテンツコンフリクト:同じ行への変更
  • リネームコンフリクト:ファイルの変更とリネーム
  • 削除コンフリクト:一方のブランチで削除、他方で変更
  • リネーム関連のコンフリクトはGitでも特に注意が必要
  • 不審なコンフリクトはファイルの履歴を確認しましょう

重要なプロジェクト作業中にGitがコンフリクトを報告してきたとします。解決への第一歩は、その種類を理解することです。コンテンツコンフリクトは、異なるブランチで同じ行が変更された場合に発生します。リネームコンフリクトはもっと複雑で、ある開発者がファイル名を変更している間に、別の開発者がその内容を編集しているようなケースです。3つ目は削除コンフリクトで、一方のブランチでファイルが削除され、もう一方のブランチでは変更が加えられている場合です。中でもリネーム関連のコンフリクトは、Gitがファイル名変更後の履歴を正しく追跡できないことが多いため、特に注意が必要です。不審なコンフリクトに遭遇したら、必ずファイルの変更履歴を確認する習慣をつけましょう。

複雑なコンフリクトの構造

  • <<<<<<< マーカーは現在のブランチの変更を示す
  • ======= が現在の変更とマージ元の変更を分ける
  • >>>>>>> がコンフリクトブロックの終端を示す
  • git status で問題のあるファイルを一覧表示
  • git diff で変更の詳細を確認可能

featureブランチをmainブランチにマージしようとしたらコンフリクトが発生したとしましょう。問題のあるファイルを開くと、特殊なマーカーが表示されます。<<<<<<< HEADと=======の間が現在のブランチ(main)の変更、=======と>>>>>>> featureの間がマージ元ブランチ(feature)の変更です。git statusを使えばコンフリクトしているファイルを一覧表示でき、git diffで詳細な差分を確認できます。これらのマーカーはエラーではなく、どこで意思決定が必要かを示すガイドとして捉えましょう。

#!/bin/bash
# コンフリクト分析スクリプト

echo "テスト用リポジトリを作成中"
mkdir conflict-demo && cd conflict-demo
git init

echo "mainブランチでファイルを作成して最初のコミット"
echo 'Line 1' > file.txt
echo 'Line 2' >> file.txt
git add . && git commit -m '最初のコミット'

echo "featureブランチを作成して1行目を変更"
git checkout -b feature
sed -i 's/Line 1/Line 1 modified in feature/' file.txt
git commit -am 'featureブランチで1行目を修正'

echo "mainブランチに戻って同じ行を変更"
git checkout main
sed -i 's/Line 1/Line 1 modified in main/' file.txt
git commit -am 'mainブランチで1行目を修正'

echo "ブランチをマージ"
git merge feature || echo 'コンフリクト発生!'

echo "\nステータスを確認:"
git status --short

echo "\nコンフリクトファイルを表示:"
cat file.txt

コンフリクト解決の戦略

  • 手動編集: マーカーを削除し、必要な部分を残す
  • GUIツール: meld, kdiff3で視覚的に比較
  • --ours/--theirs: 自分の変更か他者の変更を採用
  • rebase時はコミットごとにコンフリクトを解決
  • 解決後はgit addとgit commitを忘れずに

コンフリクトが発生したら、いくつかの解決方法があります。ファイルを手動で開いて編集し、マーカーを削除して必要なコードを残すことができます。視覚的に確認したい方は、meldやkdiff3などのツールが便利です。これらは3つのファイルバージョンを同時に表示します。自分の変更を確実に残したい場合はgit checkout --ours、他者の変更を採用する場合は--theirsを使用します。rebase時は特に注意が必要で、リベースする各コミットでコンフリクトが発生する可能性があります。

#!/bin/bash
# resolve_strategies.sh

echo "方法1: 手動での解決"
echo 'ファイルを編集し、コンフリクトマーカーを削除してください'
echo 'その後、次のコマンドを実行: git add file.txt'

echo "\n方法2: 自分のバージョンを採用"
git checkout --ours file.txt

echo "\n方法3: 他者のバージョンを採用"
git checkout --theirs file.txt

echo "\n方法4: マージツールを使用"
echo 'git mergetool --tool=meld'

echo "\n解決方法を選択したら、マージを完了させてください:"
echo 'git commit -m "マージコンフリクトを解決"'

Buong leksyon ay para sa subscription

34 pang slide sa buong bersyon.

Mabubuksan ang video, lahat ng slide, tala, pagsusulit, AI tutor, at interview pagkatapos mag-sign in at mag-subscribe.

Mag-sign in o magparehistro Mag-subscribe

Nilalaman ng leksyon

  1. 3種類のマージコンフリクト
  2. 複雑なコンフリクトの構造
  3. コンフリクト解決の戦略
  4. 予防とベストプラクティス
  5. Gitのマルチラインコンフリクトの読み方
  6. コンテキストマーカーの解読
  7. ネストされたコンフリクト: 解決戦略
  8. 自動化と高度なツール
  9. 選択戦略: HEADかブランチか?
  10. 『最も驚きが少ない』原則
  11. セマンティックコンフリクト: 見えない敵
  12. ツールと自動化
  13. ツールの選択:使用場面の見極め
  14. VS Code:設定と高度な機能
  15. Beyond Compare:複雑なコンフリクトのシナリオ
  16. Git Flowと自動化への統合
  17. .gitattributesによるマージの自動化
  18. カスタムマージドライバーの作成
  19. Git rerere — あなたのパーソナルアシスタント
  20. 高度な自動化戦略
  21. 大規模チームのためのワークフロー設計
  22. コンフリクト防止ツールとしてのコードレビュー
  23. 長期フィーチャーブランチの運用戦略
  24. コンフリクト解決のためのツールと自動化
  25. 変更の無条件受け入れの危険性
  26. 安全なコンフリクト解決の戦略
  27. マージ後のテスト:確認すべきポイント
  28. CI/CDとの統合と予防策
  29. rebaseとmergeのコンフリクトの違い
  30. --rebase-mergesの活用方法
  31. 連続するコンフリクト解決の戦略
  32. 上級テクニックとリベースのデバッグ
  33. CI/CDを活用した品質管理システム
  34. GitHub Actions:コンフリクト検証
  35. Danger-JS:インテリジェントな自動検証
  36. CI/CDにおける自動マージ競合解決
  37. マージ競合:不安から自信へ

Mga artikulo tungkol sa araling ito

Lahat ng leksyon ng kurso

  1. はじめに:ゼロから始めるGit - 自信を持って使える開発者を目指して
  2. Gitはなぜ必要なのか?~採用で求められるスキル~
  3. インストールとセットアップ:Gitの初回起動準備
  4. 最初のリポジトリ: init、add、commit、そしてインデックスの魔法
  5. Git履歴の読み方: log, diff, showと過去の履歴を辿る
  6. ブランチ: コードの並行現実
  7. ミスをなかったことに:restore、reset、revert ─ 正しい使い方と危険な落とし穴
  8. GitHubとリモートリポジトリ: クラウドでのコード管理
  9. チームワーク:フォーク、フィーチャーブランチ、プルリクエスト
  10. マージコンフリクト:慌てずに理解して解決する
  11. 実践的なチーム開発におけるGitワークフロー:最適な選択方法
  12. 上級者向けツール:rebase、stash、cherry-pick、タグ
  13. 最終プロジェクト:実際のチーム開発をシミュレートする