Git:有没有相当于hg条带?

esc*_*ten 24 git mercurial git-p4

我有一个回购,我做了一个改变,导致合并地狱,我想假装它从来没有存在过.漫长而复杂的故事涉及将预先存在的回购拼接在一个通过git-p4更新的回复之上,但结果是我真的,​​真的希望git假装从未存在过某种变化.

如果它是Mercurial,我很确定我可以解决我的问题hg strip,但我在Git中找不到这样的命令.

感谢您提出的任何建议.

Eri*_*ric 30

您需要执行多个命令.正如其他人提到的那样,第一个是git reset.你想你想要摆脱的那个之前找到变更集,然后使用

git reset --hard <changeset>
Run Code Online (Sandbox Code Playgroud)

这会将当前分支头(和索引)更改为指向该变更集,但"坏"变更集仍然存在.如果您推送它将不会包含它,但如果您克隆本地存储库它将被包括在内,它仍然可以在log和checkout命令中引用.

假设没有其他引用(例如后续提交,标签等),您可以使用以下方法清理它:

git gc --prune=now
Run Code Online (Sandbox Code Playgroud)

我发现这个命令归功于http://help.github.com/remove-sensitive-data/,它还提到(hg strip如果你)将"坏​​"变更集推送到远程位置,你无法删除它使用常规的git命令,但您需要采取其他步骤来删除并重新创建服务器上的存储库并清理所有缓存的页面.