我有一个回购,我做了一个改变,导致合并地狱,我想假装它从来没有存在过。漫长而复杂的故事,涉及将一个预先存在的回购拼接在一个通过git-p4更新的回复之上,但结果是我真的,真的希望git假装从未存在过某种变化。
如果是Mercurial,我很确定我可以用hg strip
修复我的问题,但我在Git中找不到这样的命令。
感谢你提出的任何建议。
答案 0 :(得分:27)
您需要执行多个命令。正如其他人所提到的,第一个是git reset
。您希望在之前找到您想要摆脱的变更集,并使用
git reset --hard <changeset>
这会将当前分支头(和索引)更改为指向该变更集,但“坏”变更集仍然存在。如果你推送它将不会包含它,但是如果你克隆本地存储库它仍然会包含 ,它仍然可以在log和checkout命令中引用。
假设没有其他引用(例如后续提交,标签等),您可以使用以下方法清理它:
git gc --prune=now
我发现此命令归功于http://help.github.com/remove-sensitive-data/,如果您将“坏”变更集推送到远程位置, < / em>使用常规git命令删除它,但是您需要采取其他步骤来删除并重新创建服务器上的存储库并清理所有缓存的页面。
答案 1 :(得分:4)
As larsks said,git reset --hard
可以帮助您返回所需的历史记录:
git log
找到要返回的正确sha值。git reset --hard sha
返回。答案 2 :(得分:2)
尝试阅读git reset
的文档。我并不熟悉Mercurial,但如果我理解this document,git reset
会让你做同样的事情 - 也就是说,将你的存储库重置回它历史上的前一个点。
This document详细讨论了reset
命令,this one简要讨论了纠正错误的不同选项。