内容
開発中のマージリクエストでのコード差分が意図した差分にならないことが
あったのでGitLabのchangesに出る内容について改めて確認しました。
現象
イメージとしてはmasterからf1、f2ブランチを切り、
リリース時にcheck、masterとmerge(masterのみsquashでmerge)をしている状態。
このときf1ブランチは特に問題なくmasterにmergeできましたが、
f2でf1の開発内容が入った最新のmasterをpullし、checkに対して
マージリクエストを作成した際に、既にcheckにpushされたはずのf1ブランチの開発内容が、出てきてしまうというものです。
git diff
そもそもgitにはgit diffコマンドがあります。
このコマンド、実はgit diff f1 f2 といった2つのブランチを比較する際に、
2通りの書き方があります。
①ダブルドット git diff f1..f2 ※デフォルト
②トリプルドット git diff f1...f2
これらの違いは
■ダブルドット
→ベースブランチの最新状態とトピックブランチの最新バージョンの差を表示する
■トリプルドット
→両ブランチの最新共通コミットとトピックブランチの最新バージョンとの差を表示する
GitHubDocsにも詳細が書いてありますので、興味ある方はご覧ください。
https://docs.github.com/ja/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-comparing-branches-in-pull-requests#three-dot-and-two-dot-git-diff-comparisons
マージリクエストにおけるdiff
ここからが本題です。
GitLabのマージリクエストでchangesは何の差分が表示されるかというと、
「トリプルドット」での差分になります。
参考
https://docs.gitlab.com/14.10/ee/development/diffs.html#merge-request-diffs-against-the-head-of-the-target-branch
なんで問題が発生したか
ここまでくればなぜ差分がおかしかったか理解できました。
どうすればいいのか
以下の方法しかなさそう
①masterへのmergeの際にsquashしない
②master→checkへ再マージする
とりあえず②で運用ですかね。。
以上です。