背景:之前在本地写完就git add.,git commit -m ‘…’ 到本地仓库,反复三次,最后想提交最新的一个版本到git仓库时,尴尬的发现一堆问题。尝试了很多办法后,下面给出亲测有效的解决方案。
大致原理是编辑变基文件,对多出的版本进行合并,保存并提交,然后使用强制推送完成
1、确定提交历史
使用git log命令先查看提交历史及要合并的提交
我需要提交hash值为6e的版本,但是目前中间隔了个a5版本导致没法直接提交,所以需要将6e合a5合并为一个提交,并找到这些提交的前一个提交3f,然后使用交互式变基来修改提交历史。
2、编辑变基文件
输入rebase命令打开编辑器,里面会实现类似于下图内容
git rebase -i 3f...
pick a5..01 First commit message
pick 6e... Second commit message
# .....
# .....
将你要合并的提交的 pick 改为 squash(pick 表示保留这个提交,squash 表示将这个提交合并到前一个提交中)
pick a5..01 First commit message
squash 6e... Second commit message
# .....
# .....
保存并按esc退出编辑 输入
:wq
退出文件,此时git会自动合并这些提交,然后会打开另一个编辑器,你可以在这里编辑提交信息,以描述这个合并的提交。(我直接全部默认然后就退出了)
3、合并提交完成
可以使用
git log
确定提交历史已经按照自己的要求合并
4、推送更改
使用强制推送命令即可完成最新版的推送。
git push origin main --force
PS:也可以通过创建一个新分支将最新提交推送到服务器上,要不就老老实实的pull一次push一次。平时练练手推送项目可以用我这种方法玩。