Git:是否有等同于 hg strip 的东西?

标签 git mercurial git-p4

我有一个存储库,我在其中进行了导致 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/

相关文章:

git - 如何在 Ubuntu 服务器启动时运行 meteor

git - 如何在不要求每个子存储库的密码的情况下使用子模块克隆 git 存储库

python - Ubuntu Hardy 下的 Mercurial http 接口(interface)。不起作用

python - git-p4 消息和作者编码

git - 从 git 迁移到 Perforce

python - os.path.split 似乎返回错误

git - 需要将 git 分支重置为原始版本

mercurial - 删除本地标签失败

mercurial - 使用 tortoiseHg 为 Mercurial 存储库导入具有冲突更改的补丁

git - 子文件夹中的多个 .gitignore