我有一个仓库,在其中进行了更改,导致合并困难,我想要假装它从未存在过。这是一个长而复杂的故事,涉及将一个已存在的仓库与通过git-p4更新的仓库拼接在一起,但要点是我真的非常希望Git能够假装某个特定的更改从未存在过。
如果使用的是Mercurial,我相信可以通过hg strip
来解决我的问题,但在Git中找不到这样的命令。
感谢任何您可能提供的建议。
你需要执行多个命令。正如其他人所提到的那样,第一个是git reset
。你需要找到要删除的修改集之前的变更集,并使用它。
git reset --hard <changeset>
这将更改当前分支头(和索引)以指向该变更集,但“坏的”变更集仍然存在。如果您进行推送,它将不会被包括在内,但如果您克隆本地存储库,则会包含它,并且仍然可以在日志和检出命令中引用它。
假设没有其他对其的引用(例如后续提交、标签等),那么您可以使用以下方法清理它:
git gc --prune=now
我在http://help.github.com/remove-sensitive-data/上找到了这个命令,该网站还提到(就像hg strip
一样),如果您已将"错误"的变更推送到远程位置,则无法使用常规git命令删除它,但您需要采取其他步骤来删除和重新创建服务器上的存储库并清理任何缓存页面。
正如larsks所说的那样,git reset --hard
可以帮助您返回到想要的历史版本:
git log
查找正确的sha值。git reset --hard sha
来返回。