如何在GitLab推送代码时仅保留自定义提交,避免异常合并提交?
解决Git推送后多余合并提交、保留自定义单个提交的方案
一、正确的推送流程(避免产生多余提交)
如果还未推送代码,按以下步骤操作可保证提交历史干净:
- 暂存本地未提交的改动:
git stash - 以rebase模式拉取远程最新代码(让提交历史线性,无多余合并记录):
单次执行:git pull --rebase origin dev
或配置默认pull用rebase(后续直接git pull即可):git config pull.rebase true - 恢复暂存的改动:
git stash pop - 若出现冲突,手动解决后执行
git add .,再运行git rebase --continue - 提交本地改动(使用自定义提交信息):
git commit -m "你的自定义提交说明" - 推送到远程dev分支:
git push origin dev
二、已推送多余合并提交的修正方法
若已经推送了多余的合并提交,想要将其与你的自定义提交合并为一个,需修改远程分支历史(注意:若有其他同事在该分支开发,需提前沟通):
- 用
git log查看提交历史,找到合并提交之前的远程提交哈希值(比如abc123) - 执行交互式变基:
git rebase -i abc123 - 在弹出的编辑界面中,将合并提交的前缀改为
s(squash,保留提交信息)或f(fixup,丢弃提交信息),保存退出 - 若出现冲突,解决后执行
git add .,再运行git rebase --continue - 强制推送修正后的分支(用
--force-with-lease更安全,避免覆盖他人改动):git push origin dev --force-with-lease
问题原因说明
你之前使用git config pull.rebase false(merge模式)拉取代码时,Git会自动生成一条合并提交,将远程改动与本地提交合并,这条自动生成的提交不会展示你的完整改动内容,还会让提交历史变得混乱。使用rebase模式拉取则会将你的本地提交“接”在远程最新提交之后,保持历史线性且无多余合并记录。
内容的提问来源于stack exchange,提问作者Ch1irxo 17
相关产品推荐
相关产品推荐

