解説
git logの..と...は何が違う?片側の追加と両側の分岐を数えよう
共通のコミットから分岐したローカル履歴で、A..BとA...Bを比較。左右の件数、順序の意味、git diffとの読み方の違いを整理。

二つのブランチを比べるとき、git log main..sideとmain...sideでは対象のコミットが違う。ドットが一つ増えただけでも、確認したい差は変わるよ。
今回は共有の接続先がない一時リポジトリで、main側に1件、side側に2件だけ追加する。コミットとブランチの基本が分かる人向けに、履歴の集合を数える練習をしよう。
練習用の分岐を作る
次のブロックは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 branch side
printf 'main\n' > main.txt
git add main.txt
git commit -qm main-only
git switch -q side
printf 'one\n' > side.txt
git add side.txt
git commit -qm side-one
printf 'two\n' >> side.txt
git add side.txt
git commit -qm side-two
git rev-list --count main..side
git rev-list --count side..main
git rev-list --left-right --count main...side
最後の三行の結果は、順に2、1、そして左1・右2となる。rev-listは履歴を列挙するためのコマンドで、ここではlogと同じ範囲指定を件数で確かめているよ。
二つのドットは、右にあって左にない履歴
main..sideは、sideから到達でき、mainからは到達できないコミットを選ぶ。この例ではside-oneとside-twoの2件。side..mainなら、逆にmain-onlyの1件になる。
git log --format=%s main..side
git log --format=%s side..main
ブランチ名を書く順序に意味があるので、「二つの枝の差」とだけ覚えないでね。共通のbaseは、どちらの結果にも含まれない。
三つのドットは、片側だけにある履歴を両方
main...sideは、どちらか片側からだけ到達できるコミットを選ぶ。今回はmain側1件とside側2件の合計3件だよ。共通部分は除外される。
git log --left-right --format='%m %s' main...side
左側のmainだけにあるものには<、右側のsideだけにあるものには>が付く。単純な新旧の関係ではなく、両方に固有の変更がある状態を読み取れるね。
git diffへそのまま読み替えない
ここで扱ったのはlog・rev-listが選ぶコミットの集合。git diff A...Bは同じ説明ではなく、共通祖先を基準にB側の差分を見る使い方になる。コマンドが違ってもドットだけで意味を決めないようにしよう。
この例は取り込み・削除・履歴の書き換えを行わない。一時リポジトリは確認後に作業場所を離れ、不要になった練習フォルダーだけを片付けられる。実リポジトリでは、名前がどのコミットを指しているかも先に確認したいね。
2026年10月29日にGit公式の範囲指定と照合し、一時リポジトリで件数とコミット名を検証した。fetchとpull、修正を含むブランチも関連するよ。

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