GitLabのマージリクエスト(MR)のChangesに表示されるのは
git diff <base branch>...<source branch>
である。トリプルドット...
に注意。
Commits > Compare
でも2つのコミット選択欄の間に...
が表示されている。
ダブルドットとトリプルドットの違い
git diff
において、ダブルドット..
によるコミット指定
git diff <base commit>..<changed commit>
は<base commit>
と<changed commit>
を直接比較している。これは、..
を空白にした
git diff <base commit> <changed commit>
でも同じ動作をする。
そして、トリプルドット...
よるコミット指定
git diff <base commit>...<changed commit>
は 「<base commit>
と<changed commit>
の共通祖先コミット」 と<changed commit>
を比較する。
以下個人的なこと
自分が不思議に思っていた動作
git pull
- ローカルで
master
から二つのブランチb1
,b2
を作る b1
でf.txt
というファイルを作り、コミットb1
をプッシュしてmaster
へのMR出してマージb2
にf.txt
をコピーして(git restore -s b1 f.txt
とか)、b2
をコミットb2
をプッシュしてmaster
へのMR出す。
→ Changesにf.txt
を追加したという変更履歴が表示される。
master
にはもう既にf.txt
があるのに、なぜこのファイルの追加変更履歴がChangesに表示される?
勘違いしていたことと正しい理解
- GitLabのMRのChangesに表示されるのは
master
とb2
の比較だと思っていた。だが違う。 - 正しいのは「
master
とb2
の共通祖先コミット」とb2
の比較である。 - 「
master
とb2
の共通祖先コミット」には確かにf.txt
が存在していない。
そのため、確かにリモートのmaster
には既にf.txt
が存在するが、b2
のmaster
へのMRのChangesにf.txt
を追加したという変更履歴が表示される。