三浦と窮理とブログ

自分の経験したことを検索可能にしていくブログ.誰かの役に立ってくれれば嬉しいです.

GitLabのマージリクエストのChangesに表示される差分

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>を比較する。

以下個人的なこと

自分が不思議に思っていた動作

  1. git pull
  2. ローカルでmasterから二つのブランチb1,b2を作る
  3. b1f.txtというファイルを作り、コミット
  4. b1をプッシュしてMR出して、リモートのmasterにマージ
  5. b2f.txtをコピーして(git restore -s b1 f.txtとか)、b2をコミット
  6. b2をプッシュしてMR出す。

→ Changesにf.txtを追加したという変更履歴が表示される。

masterにはもう既にf.txtがあるのに、なぜこのファイルの追加変更履歴がChangesに表示される?

勘違いしていたことと正しい理解

  • GitLabのMRのChangesに表示されるのはmasterb2の比較だと思っていた。だが違う。
  • 正しいのは「masterb2の共通祖先コミット」とb2の比較である。
  • masterb2の共通祖先コミット」には確かにf.txtが存在していない。

そのため、確かにリモートのmasterには既にf.txtが存在するが、b2masterへのMRのChangesにf.txtを追加したという変更履歴が表示される。

参考

https://qiita.com/m-yamazaki/items/e57e357116e95ae370dc

何が変わるのかの把握