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

时间:2012-03-31 00:27:27

标签: git mercurial git-p4

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

如果是Mercurial,我很确定我可以用hg strip修复我的问题,但我在Git中找不到这样的命令。

感谢你提出的任何建议。

3 个答案:

答案 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 saidgit reset --hard可以帮助您返回所需的历史记录:

  1. 使用git log找到要返回的正确sha值。
  2. 运行git reset --hard sha返回。

答案 2 :(得分:2)

尝试阅读git reset的文档。我并不熟悉Mercurial,但如果我理解this documentgit reset会让你做同样的事情 - 也就是说,将你的存储库重置回它历史上的前一个点。

This document详细讨论了reset命令,this one简要讨论了纠正错误的不同选项。