Menu
Coddy logo textTech

Git Merge

最終更新

git merge は別のブランチのコミットを現在のブランチに取り込みます。現在のブランチが分岐していない場合、Git は fast-forward を行い、ポインタを前に進めるだけです。両方のブランチに新しいコミットがある場合、Git は2つの履歴を結び付けるマージコミットを作成します。rebase とは異なり、merge は両方のブランチの正確な履歴を保持します。

これらをターミナルプレイグラウンドで試してみましょう。ブラウザ内の本物のシェルで、インストールは不要です。

構文

CommandWhat it does
git merge featurefeature を現在のブランチにマージする
git merge --no-ff feature常にマージコミットを作成する
git merge --ff-only featurefast-forward できる場合のみマージする
git merge --squash featureブランチのコミットを1つにまとめる
git merge --abort競合したマージを取り消す

Fast-forward vs マージコミット

ScenarioFast-forwardMerge commit (--no-ff)
新しいコミットを作成するいいえはい
ブランチの記録を残すいいえはい
発生する条件現在のブランチが分岐していない両方のブランチに新しいコミットがある

マージ競合の解決

両方のブランチが同じ行を変更した場合、Git は一時停止します。

StepCommandResult
1競合したファイルを編集する正しい行を選び、マーカーを削除する
2git add <file>競合を解決済みとしてマークする
3git commitマージを完了する

git merge のよくある質問

Git であるブランチを別のブランチにマージするには?
マージ先のブランチに切り替え(例:git switch main)、次に git merge feature を実行します。Git は feature のコミットを main に統合し、fast-forward するか、両方のブランチが分岐している場合はマージコミットを作成します。
fast-forward とマージコミットの違いは何ですか?
fast-forward は、他のブランチが分岐して以降、現在のブランチが動いていない場合に発生します。Git はポインタを前にスライドさせるだけで、新しいコミットは作成しません。マージコミットは両方のブランチに新しいコミットがある場合に作成され、それぞれの履歴を結び付けます。常にマージコミットを作成するには --no-ff を、fast-forward を必須にするには --ff-only を使います。
マージ競合を解決するには?
マージで競合が起きると、Git は該当ファイル内の衝突している部分を <<<<<<<=======>>>>>>> のマーカーで示します。各ファイルを編集して正しい内容を残しマーカーを削除し、解決したファイルを git add してから git commit でマージを完了します。
マージを取り消す、または中止するには?
マージがまだ進行中の場合(競合が未解決の場合)、git merge --abort を実行してマージを取り消し、マージ前の状態に戻します。マージがすでにローカルで完了している場合は、git reset --hard ORIG_HEAD がブランチをマージ前の位置に戻します(HEAD~1 と違い fast-forward の後でも正しく機能しますが、コミットしていない作業は破棄されます)。マージがプッシュ済みなら git revert -m 1 <merge-hash> を使います。
これをオンラインで練習できますか?
はい。ターミナルプレイグラウンドを開けば、ブラウザ内の本物のシェルで git merge を実行できます。インストールは不要です。Coddy の無料のインタラクティブな Git コースでも、マージと競合の解決を段階的に扱っています。
Coddy programming languages illustration

Coddy で Git を学ぼう

始める