git的提交历史记录出现问题了,能修正常见的几种方案
未提交到远端:
1.粘贴打法(其他手段都不行的话,这是一个不会丢失修改的保底方案,因为有备份) 复制粘贴一份代码,例如只有最新的一次,直接it reset HEAD~1往前几次记录就几次,然后直接将新代码粘过来替换,这也是最原始粗暴的方案
当然也可以直接从远端直接拉去一个新分支,然后粘贴替换在提交也行
2.如果只有最新的一次,直接it commit --amend -m "最新的正确的提交信息"
如果中间有一次是错误的,直接git rebase -i HEAD~1 此间往前几次记录就倒几次,执行后会提示一个修改的内容,将 pick 改成 reword 就可以修改提交历史了,保存后继续,有冲突处理冲突,如果还有修改提示继续修改 reword,然后继续即可,可以使用 git rebase --continue继续、git rebase --abort结束(pick采纳、reword保留提交修改message、s(squash合并到前一次提交)、fixup合并到前一次提交并丢掉message、drop删除提交),缺点是如果有很多冲突很麻烦
还有就是从没问题前的一次提交,直接it checkout -b 新分支然后使用git merge --squash 原分支,将原分支的内容一次性合并压缩到一次提交中合并,然后使用 git commit -m "新的message" 直接提交即可修复,缺点是其他的提交也被合并到一个了
如果提交到远端:
1.上面的方法仍然可以使用,对于换新分支的,直接放心推送到远端就行了,删除原分支,取而代之即可
2.对于没有换分支,使用正规手段解决的,例如git rebase这种,修改了直接强制推送到远端即可,如果是公共分支有其他人一起开发,使用git push --force-with-lease origin uat(目标分支uat),安全推送到远端,不会因为别人也有操作直接覆盖别人的内容,个人分支直接 git push --force origin uat(目标分支uat) 即可
ps:对于自己的分支,万金油手段,切出一个新分支,将老代码直接粘贴过来,或者执行git cherry-pick [commitid] 将原有记录遴选过来,直接再改动一些,这种类似手段,直接当做新开发的分支使用就行了,只要代码内容正确即可,老分支直接删除即可,当然也可以删除后直接改名回来
对于公共分支,必要时机也可以这么使用(剔除多余的提交,很常见),直接删除原有分支到远端,根据某次提交检出新分支名字一样即可,这样就可以重新合并新的提交了