ブランチのマージは、Gitを使った共同作業における重要な側面です。これにより、開発者は異なるブランチからの変更を統合し、機能と改良を統一されたコードベースに統合できます。このチュートリアルでは、主要なマージの種類と競合の解決について説明します。
目次
Fast-Forward マージ
Fast-Forward マージは最も簡単なタイプです。マージ先のブランチ(ターゲットブランチ)が、マージ元のブランチ(ソースブランチ)の直接の子孫である場合に発生します。つまり、分岐したコミットはなく、履歴は線形です。Gitは、新しいマージコミットを作成せずに、ターゲットブランチポインタをソースブランチの最新のコミットに効率的に移動します。
例:
main
ブランチとfeature
ブランチがあるとします。feature
をmain
から分岐させ、feature
でコミットを行い、feature
をmain
にマージしたいとします。feature
の作成以降、main
でコミットが行われていない場合、Fast-Forward マージが行われます。
# mainブランチをチェックアウトします
git checkout main
# featureをmainにマージします
git merge feature
出力はFast-Forward マージを確認し、クリーンで効率的な統合を示します。
再帰的マージ
再帰的マージは、ブランチが分岐している状況に対処します。これは、共通の祖先から分岐して以降、ソースブランチとターゲットブランチの両方でコミットが行われた場合に発生します。Gitは再帰アルゴリズムを使用してこれらの変更をインテリジェントに組み合わせ、通常はターゲットブランチに新しいマージコミットを作成します。
例:
main
とfeature
の両方で、分岐以降コミットが行われている場合、feature
をmain
にマージすると、再帰的マージがトリガーされます。
# mainブランチをチェックアウトします
git checkout main
# featureをmainにマージします
git merge feature
Gitは、結合された変更を表すマージコミットを作成します。出力は、再帰的マージ戦略が使用されたことを示します。
マージ競合の解決
競合は、同じファイルの同じ行が両方のブランチで変更されている場合に発生します。Gitはどの変更を保持するかを自動的に決定できないため、マージを停止し、影響を受けるファイルの競合セクションにマークを付けます。
競合の特定:
Gitは、競合ファイルに特別なマーカー(<<<<<<<
、=======
、>>>>>>>
)を追加し、ステータス出力にそれらをリストします。
競合の解決:
- 競合ファイルを開く:各ブランチからの変更を理解するために、マークされたセクションを確認します。
- ファイルを編集する:競合マーカーを削除して、競合を手動で解決します。
- 変更をステージングする:
git add <file>
を使用して、解決されたファイルをステージングします。 - マージをコミットする:
git commit
を使用してマージを完了します。Gitは、解決された変更を含むマージコミットを作成します。
競合ファイルの例:
<<<<<<>>>>>> feature
どちらかの行、またはそれらの組み合わせを選択するように編集します。
Fast-Forward マージと再帰的マージを習得し、競合を効果的に処理することで、Gitのワークフローを改善し、効率的な共同作業を可能にします。