将已经推送到远端的几个提交合并为一个提交

情景

修改一个bug时,往往会受限于当时的水平,没考虑到一些问题,因此每次当以为修复了bug时,git commit & git push,将代码推送到远端。然后就会出现一个问题有很多个提交的情况。这样的话有两个主要的问题:一个是不够美观或者同一个问题多次提交视觉观感不好,另一个是代码评审的时候,评审人往往只是想看你最终修改了什么,他对于你的修改记录是不关心的,而多次修改就得多次比对,造成评审人的困扰。
因此就有了这篇文章

如何实现

首先先去数一下你之前共提交了多少次,以及你想把代码从哪里开始提交。这里说得可能不是太明白,举个例子:假如你现在有一个定制项目,共有新2个需求,你新开了一个分支,第一个需求共提交到远端1次,而第二个需求前前后后共提交了4次。这时候你可以输入以下命令
git reset --soft "HEAD~4"
这时候再输入git add . git commit - m "这个修改的简要描述"
这时候你就会发现一个类似这样的图
image.png
这里上边的四个红点,表示你做第二个需求时的四次提交,然后我们通过上面的操作走到了绿色的点所代表的位置。但是这时候你会发现:远端分支的HEAD在最上边的红色的点上,而你本地分支的HEAD在绿色的点上。这时候你输入git push会得到类似如下的信息:
! [rejected] 本地分支名 -> 远端分支名 (non-fast-forward)
error: failed to push some refs to '仓库SSH URL'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.


这时候只需要执行git push origin 远端分支名 --force即可,这时候你就会发现前面的提交都被合并到一起去了。

posted @ 2023-03-21 20:14  ZJHqs  阅读(329)  评论(0编辑  收藏  举报