文章目录
情况一:尚未推送或无法推送
情况描述:该情况往往出现于本地多次提交commit,但一直没推送。
通常满足两个条件:
- 没推送的commit中存在一个推送不了/不需要的错误commit,此时需要删除这个commit。
- 需要保留当前的代码。
如下图所示。
解决方式:
首先,通过
git log
想清楚自己需要切换到哪一个commit状态,查看commit id:
# 查看git记录(能看到每次操作的id):git log
第二步,将仓库的状态恢复到能够正常提交的状态/需要删除的状态的上一个commit状态(
--soft
参数会保证恢复后你的文件夹内容保持不变):
git reset --soft <无法上传的那次的上一个的id>
注:id输入6位以上就差不多可以了,多输入几位也行,不用全选
注:git reset 有三种模式:–soft、–hard和不加参数。
- –soft是保留工作区的内容和add提交,只是切换指针
- –hard是什么都不保留
- 不加参数是保留工作区的内容但是不保留add提交
在其他情况下,你也可以选择使用其他的参数。
第三步,检查当前Git的状态,尝试push:
# 可以看到完整的修改记录:git status
# 重新提交commitgit commit -m "xxxxxx"# 尝试pushgit push
如果文字描述无法理解的话,也可以看视频描述,更具体一些,当我还是小白的时候这个视频帮助我圆满解决了这个问题:《从零开始的 Git 生活》Lesson 8 Git 中的后悔药.bilibili.全栈港。
情况二:已经推送
注:最好别用
git revert
撤销提交,有点难用。
情况描述:该情况往往出现于已经推送了commit,但是突然发现有个bug。为了保证commit的纯净性不愿意再推一个commit,所以打算覆盖上一次推的commit。
也有可能是这样的情况:很久很久以前,A写了一个版本。B接手后,决定重构。C接手后,觉得B写得还没月A好呢,就决定在A的基础上继续开发,舍弃B的一切commit。
解决方式:
与第一种情况一致,回到需要的commit状态即可。只不过最后推送时要使用强制推送:
git push -f
情况三:想要删除所有的commit记录
参考:Git | 清除所有提交(commit)记录
情况描述:删库跑路/抹杀开发过程/保护隐私必备。
方式一:
1.删除.git
git init
git remote add origin [email protected]:user/repo
2.重新添加所有文件:
gitadd.3.提交:
git commit -m 'message'4.强制更新:
git push -f origin master
做完这些操作后可以用
git log --oneline
查看操作log。
方式二:
1.新建一个分支:
# 注意orphan代表这个分支是一个初始提交,# 意思是前面的记录都不存在,# 而git checkout -b则会保留之前的commit记录git checkout --orphan <分支名>2.将无敏感信息的新内容正常提交到新分支里:
gitadd.git commit -m "new"git push --set-upstream origin <分支名>3.删除原来的分支:
git branch -D master
4.将<分支名>改成master:
git branch -m master
5.强制推送:
git push -f origin master --set-upstream
版权归原作者 shandianchengzi 所有, 如有侵权,请联系我们删除。