Bitbucket Server/Data Center shows diff between branches even after they are merged (using squash commit)
プラットフォームについて: サーバーと Data Center のみ。この記事は、サーバーおよび Data Center プラットフォームのアトラシアン製品にのみ適用されます。
要約
When a feature branch is merged to the target branch using squash commit, comparing the two branches post the squash commit merge still shows the diffs.
環境
All versions of Bitbucket Server/DC.
診断
- Create a branch say feature/newfeature1 from master and add some changes to a file test.txt.
- Now merge the branch feature/newfeature1 into master using squash commit merge strategy without deleting the source branch.
- After the merge again compare the branch feature/newfeature1 with master. It can be noticed that the same diff is still shown even after the contents of the feature branch are now part of master.
原因
This is an expected behaviour when using squash merge strategy. Squash commit combines all of the feature branch's commits into one new non-merge commit on the target branch. It is important to note that unlike the normal merge commit squash commits are non merge commits (have single parent) and hence do not link the two branch histories together.
Below is a visual representation of the difference between squash commit and merge commit.
Merging with squash commit (Note the common ancestor between the branches is not updated hence the the diffs will still be shown from the old common ancestor)
Merging with merge commit (Note the common ancestor is updated hence the the diffs will be shown from the new common ancestor)
ソリューション
Merge the feature branch into master again using merge commit. This will update the common ancestor between the branches which in turn will update the diffs.