【经验】Git|如何删除错误的commit?(存在大文件无法push的commit、不需要的commit等情况、清除所有commit的情况)

2024/04/24说明:这篇暂时修改为粉丝可见,因为正在冲粉丝量,等到我弄完了粉丝量的要求,我就改回来!不方便看到全文的小伙伴不好意思!!
2024/04/29说明:谢谢大家已经到2000了(虽然原本也只差个200),已经变成全部可见。

情况一:尚未推送或无法推送

如果你在本地多次提交了commit,但是其中有一个commit交错了、或者无法推送,
就像下面这张图这样:

在这里插入图片描述

你可以安装以下步骤操作。

  1. 通过git log想清楚自己需要切换到哪一个commit状态,查看commit id:

    # 查看git记录(能看到每次操作的id):
    git log
    
  2. 将仓库的状态恢复到能够正常提交的状态/需要删除的状态的上一个commit状态--soft参数会保证恢复后你的文件夹内容保持不变):

    git reset --soft <无法上传的那次的上一个的id>
    

    注:id输入6位以上就差不多可以了,多输入几位也行,不用全选
    注:git reset 有三种模式:–soft、–hard和不加参数。

    1. –soft是保留工作区的内容和add提交,只是切换指针
    2. –hard是什么都不保留
    3. 不加参数是保留工作区的内容但是不保留add提交

    在其他情况下,你也可以选择使用其他的参数。

  3. 检查当前Git的状态,尝试push:

    # 可以看到完整的修改记录:
    git status
    # 重新提交commit
    git commit -m "xxxxxx"
    # 尝试push
    git push
    

如果你无法理解以上文字描述以及命令行操作的话,也可以看视频描述,更具体一些,当我还是小白的时候这个视频帮助我圆满解决了这个问题:《从零开始的 Git 生活》Lesson 8 Git 中的后悔药.bilibili.全栈港

情况二:已经推送

注:最好别用git revert撤销提交,有点难用。

如果你不小心已经把错误的 commit 推上去了,也不要紧。

与第一种情况一致,首先,本地执行情况一中提到的三个步骤,回到需要的commit状态。

最后推送时使用强制推送:

git push -f

情况三:想要清除所有的commit记录,只保留一个

情况描述:删库跑路 or 抹杀开发过程 or 保护隐私必备。

首先在 github 网页上或者使用 git log 查看第一个 commit 的 id,然后运行:

git reset --soft <第一个 commit 的 id>
git commit --amend

这两行指令的含义是:

  1. 将当前分支的状态切换到第一个提交中,并保留本地的修改以及暂存区的设置;
  2. 将现在的暂存区的内容直接 amend 到前一个提交(在这里指的就是第一个 commit)。

运行这两行指令之后,将会弹出一个新的编辑框,要求填写 commit message。默认的 commit message 就是你的第一个提交的 commit 信息,如果你需要修改,就修改一下。

在这里插入图片描述

这一部分的操作很简单也很直观,不过会有人使用 rebase 做这个操作,为了描述为什么不使用 rebase,我添加了一些详细分析。为控制篇幅,我将详细的所有三种方案以及不使用 rebase 的原因写在了另一篇博文里,欢迎阅读:【经验】Git|如何将仓库中所有的 commit 合成一个?又名,如何清除所有 git 提交记录?

本账号所有文章均为原创,欢迎转载,请注明文章出处:
https://blog.csdn.net/qq_46106285/article/details/124744328
。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。

  • 8
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shandianchengzi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值