【问题标题】:Hard delete last n commits from git history [duplicate]从 git 历史记录中硬删除最后 n 次提交 [重复]
【发布时间】:2020-11-25 17:21:51
【问题描述】:

假设我不小心将一些秘密(例如密码)推送到了 git 存储库。因此,提交并推送原始主机。我怎样才能将它从历史记录中完全删除。我已经阅读了很多关于这个的答案,最合乎逻辑的一个似乎是 git rebase 之后它说成功但没有任何改变..

>git log
commit 48fe584bf7b6b88a68cd4495c0b4c8c562c47dd1 (HEAD -> master, origin/master, origin/HEAD)
Author: me
Date:   Wed Nov 25 17:32:20 2020 +0100

    u

commit 168ee00260a704c2d20f8c70e52cb8db3ee2057b
Author: me
Date:   Wed Nov 25 17:19:27 2020 +0100

    yy

commit a19d7856ad600c0dd3cf5c512e7cb8336a1573cf
Author: me
Date:   Tue Nov 24 16:00:48 2020 +0100

    iii


> git rebase -i a19d7856ad600c0dd3cf5c512e7cb8336a1573cf
Successfully rebased and updated refs/heads/master.

之后 git log 显示完全相同...

【问题讨论】:

  • 你的意思是git reset --hard a19d7856
  • 我一开始以为是这样,但后来你得到了这个你的分支落后于 'origin/master' 2 次提交,并且可以快进。 (使用“git pull”来更新你的本地分支)
  • 我想我应该进入一种我推东西的状态,对,现在拉只会重置我的重置,可以这么说......
  • 特别是。看到这个答案:stackoverflow.com/a/32840254/7976758

标签: git


【解决方案1】:

您需要将git rebase -i 用于interactive mode。在那里,您可以从列表中删除错误的提交,这将在没有该提交的情况下为您提供重写的历史记录。

那么你需要force-push那个新的历史记录到远程存储库。

但请注意,这不能强制覆盖其他用户可能拥有并且可能已经提取您的秘密提交的本地存储库。因此,您应该将这些凭据视为已泄露并更改它们!

【讨论】:

    猜你喜欢
    • 2014-11-20
    • 2014-06-24
    • 1970-01-01
    • 2012-04-06
    • 2012-12-14
    • 2013-08-03
    • 2014-05-05
    • 2015-09-02
    • 1970-01-01
    相关资源
    最近更新 更多