1、ShowHistory打开git日志

2、选中第2个commit,右键菜单Reset Current Branch to Here
3、选择hard ,点Reset。
(1)hard :当使用这个命令后,工作区、暂存区的内容都会和当前head指向的内容相同。
也就是说hard之后,在本地分支中,所有代码都已经回到了指定的commit版本了,在这个版本之后的代码已经看不见了,想要看见的话,就先把本地分支删了,然后重新拉取该分支的远程库上的代码。
(2)soft: 当使用这个这个命令后,head指针指向指定的commit,但是工作区、暂存区的内容不会发生变化。
也就是idea 当前分支的history提交记录树看不见后面版本了,并且指定commit版本之后的代码文件在idea中重新显示为红色或者蓝色,表示这个文件未提交
(当然,这只是本地分支中未提交,对远程分支暂时还没任何影响)
这个时候再重新commit一次,这样就把这个commit版本之后的所有版本合并为一个新的commit了。后面只要强制push,用本地分支覆盖远程分支,这样就能实现多次commit合并为一次的效果。
(3)其他的用不着,自行百度
4、然后commit 提交到本地(先别直接push,否则又会和远程分支的合并了)
5、使用命令行方式强制覆盖远程分支
参考自:https://blog.csdn.net/ManyPeng/article/details/81095744
(1)这个远程分支只有你一个人在开发
此时没有其他人会进行提交操作,那么可以直接进行强制推送 git push --force origin branchName,–force可以直接理解为用你本地分支的状态区覆盖掉远端origin分支的状态,也就是执行过后,本地的分支什么样,远端分支就什么样
(2)远程分支有多人开发
此时如果你贸然的使用–force命令,会有覆盖掉其他人提交代码的风险。比如,小明和小红两个人同时在feature分支上进行开发,小明已经在feature分支上提交了一部分代码,而小红此时执行了rebase操作,所以如果想要推送到远端仓库就必须使用 - -force 参数,而小红推送成功之后就会覆盖掉小明提交的代码(前面说过–force就是用本地状态覆盖掉远端状态)。在这种情况下,推荐另外一种更安全的命令git push --force-with-lease origin branchName 使用该命令在强制覆盖前会进行一次检查如果其他人在该分支上有提交会有一个警告,此时可以避免覆盖代码的风险。