解説
マージ後の本流だけをたどりたい:git log --first-parentで取り込みの流れを読もう
マージコミットの第一親をたどる履歴と通常の履歴を比較。機能側の細かなコミットを削除せず、本流への取り込みのまとまりを確認する。

機能ブランチをいくつも取り込むと、git logに細かな作業コミットも並び、本流でいつ取り込んだかを追いにくくなることがある。そんなときの読み方の一つが、--first-parentだよ。
このページはブランチとマージの基本が分かる人向け。外部の接続先を持たない練習用リポジトリで、通常の履歴と、本流側をたどる履歴を比べる。既存のプロジェクトの履歴は変えないよ。
マージには二つ以上の親がある
コミットの親は、その直前の履歴に当たる。通常のコミットなら一つ、二つの枝を合わせたマージコミットなら複数の親を持つ。
今回の例でmainへfeatureをマージすると、第一親はマージ実行直前のmain側、第二親は取り込むfeature側になる。--first-parentは、マージに出会ったとき、第一親の方だけへ進んで履歴をたどる指定だよ。
独立した練習用のマージを作る
次の一まとまりをBashのターミナルで実行する。一時フォルダー内のファイルと、そのリポジトリだけのGit設定を作るよ。既存リポジトリやグローバル設定を書き換えない。行末の&&は前の処理に成功した場合だけ次へ進む指定で、一時フォルダーの作成や移動に失敗した場合も後続を実行しないよ。
practice_dir=$(mktemp -d) &&
cd "$practice_dir" &&
git init -q -b main &&
git config user.name Practice &&
git config user.email practice@example.invalid &&
printf 'base\n' > base.txt &&
git add base.txt &&
git commit -qm base &&
git switch -qc feature &&
printf 'one\n' > feature.txt &&
git add feature.txt &&
git commit -qm feature-one &&
printf 'two\n' >> feature.txt &&
git add feature.txt &&
git commit -qm feature-two &&
git switch -q main &&
printf 'main\n' > main.txt &&
git add main.txt &&
git commit -qm main-only &&
git merge -q --no-ff feature -m merge-feature &&
git rev-list --count HEAD &&
git rev-list --first-parent --count HEAD &&
git log --first-parent --format=%s
合計件数は5、本流側だけをたどる件数は3になる。最後の表示は、merge-feature、main-only、baseの順だよ。
練習の--no-ffは、違いを見るためにマージコミットを確実に作る指定。実際のチームの取り込み方針を、この記事の例に合わせて変更する必要はないんだ。
見えない作業が、削除されたわけではない
通常の履歴ではfeature-one・feature-twoも到達可能なコミットとして含まれる。--first-parentではそれらへ枝分かれせず、取り込んだまとまりをmerge-featureとして追えるよ。
git log --format=%s
git log --first-parent --merges --format=%s
--mergesも付けた二行目は、今回ならmerge-featureだけになる。最初に--first-parentだけで本流側の通常コミットも確認し、取り込みだけへ絞りたいときに--mergesを加えると、見落としを減らしやすいね。
最初の作例が最後の表示まで成功し、その練習フォルダーにいる状態で続けよう。表示対象を絞るだけで、機能側のコミットや変更内容を消してはいない。実際の変更を読むときは、対象のコミットをgit showなどで確認しよう。
すべての履歴で同じまとまりになるわけではない
ファストフォワードでブランチの先端だけを進めた場合、新しいマージコミットは作られない。その場合は、機能側だったコミットも第一親の一本道として現れるよ。
どちらをmainとして取り込んだか、マージ・スクワッシュ・リベースなどの運用によっても、読む履歴は変わる。--first-parentを付ければ、自動で「リリースに必要な変更だけ」が分かるわけではないんだ。
編集部では2026年10月29日にGit公式のオプション説明と照合し、一時リポジトリで5件・3件の差、コミット名、マージだけの表示を検証した。確認後は作業場所を離れ、練習フォルダーだけを片付けられるよ。二つと三つのドットの範囲、git showでファイルの変更を読むも関連するよ。

みんなのコメント 0
感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。
最初のコメントをどうぞ。