如何在合并压缩提交后修复GitLab合并请求问题
解决GitLab合并请求显示旧提交的问题
问题原因
你之前用压缩合并把develop的75个提交分批合并到master,这种合并方式会生成全新的提交(哈希值和原始提交完全不同)。Git判断提交是否已合并是靠哈希匹配的,所以develop上的原始75个提交在Git看来从未被master包含,导致MR对比时全部显示出来。
临时修正(仅让当前MR显示正确变更)
如果只是想让当前MR的对比结果正常,不改动分支历史,执行以下步骤:
- 拉取最新master分支:
git checkout master && git pull - 将master合并到develop(普通合并,不要压缩):
git checkout develop && git merge master - 推送到远程:
git push origin develop
这步操作后,GitLab会识别出develop上的旧提交内容已通过之前的压缩提交同步到master,MR对比就只会显示develop上的新变更。
永久修复(避免后续MR再出现此问题)
如果不想每次开MR都重复上面的操作,可以重写develop的历史,让它基于master的最新状态:
警告:此操作会改写远程develop的历史,需提前和团队成员沟通,确保所有人同步操作,否则会引发冲突。
- 拉取最新master:
git checkout master && git pull - 创建临时分支并迁移develop上的新提交:
git checkout -b temp-develop master # 用git log --oneline master..develop查看需要迁移的新提交范围 git cherry-pick <新提交起始哈希>..<develop最新提交哈希> - 替换远程develop分支:
git checkout develop git reset --hard temp-develop git push origin develop --force - 删除临时分支:
git branch -D temp-develop
关于直接提交MR的可行性
直接提交当前MR是可以的,Git在合并时会自动识别旧提交的内容已经通过之前的压缩合并同步到master了,不会重复合并旧内容,最终只会合并develop上的新变更。但MR的对比界面会混杂大量旧提交,不利于代码审查,建议先修正后再提交。
内容的提问来源于stack exchange,提问作者user2517021
相关产品推荐
相关产品推荐

