我有一个存储库,我在其中进行了导致 merge hell 的更改,我想假装它从未存在过。漫长而复杂的故事涉及将一个预先存在的存储库拼接在一个通过 git-p4 更新的存储库之上,但结果是我真的非常希望 git 假装某个更改从未存在过。
如果是 Mercurial,我很确定我可以用 hg strip
解决我的问题,但我在 Git 中找不到这样的命令。
感谢您提出任何建议。
最佳答案
您需要执行的命令不止一个。正如其他人提到的,第一个是 git reset
。您需要找到您要删除的那个之前的变更集,然后使用
git reset --hard <changeset>
这将更改当前分支头(和索引)以指向该变更集,但“坏”变更集仍然存在。如果您推送,它不会被包含,但如果您克隆本地存储库,它将被包含,并且它仍然可以在日志和 checkout 命令中引用。
假设没有其他引用(例如后续提交、标签等),您可以使用以下方法清理它:
git gc --prune=now
感谢 http://help.github.com/remove-sensitive-data/,我找到了这个命令,其中还提到(与 hg strip
一样)如果您已将“坏”变更集推送到远程位置,您不能使用常规 git 命令将其删除但是您需要采取额外的步骤来删除和重新创建服务器上的存储库,并清理所有缓存的页面。
关于Git:是否有等同于 hg strip 的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9951939/