LoginSignup
2
1

More than 1 year has passed since last update.

GitLabのマージリクエストのchanges

Posted at

内容

開発中のマージリクエストでのコード差分が意図した差分にならないことが
あったのでGitLabのchangesに出る内容について改めて確認しました。

現象

発生した現象はこのようなイメージです。
image.png

イメージとしては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

これらの違いは
■ダブルドット
→ベースブランチの最新状態とトピックブランチの最新バージョンの差を表示する
■トリプルドット
→両ブランチの最新共通コミットとトピックブランチの最新バージョンとの差を表示する

画像にするとこんな感じです。
uWWDV.png

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へ再マージする
とりあえず②で運用ですかね。。

以上です。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1