2011-10-28 91 views
8

我犯了两次错误。如何恢复两次提交并只提交好东西?如何恢复两次提交并只提交好东西?

+0

什么是好东西?你能否更详细地描述你的历史现在看起来如何,你想如何看待? – svick

+0

如果得到正确的答案(好东西?),稍微详细一点会有所帮助。 – ryanzec

+0

在您提交其他所有内容之前删除所有不良内容。 –

回答

11

你可以做一个git rebase -i HEAD~2,然后使用该接口放弃自那时起就存在的“坏提交”并清理你的历史。然而,这改变了项目的历史,如果你已经推动(和其他人)你的改变,那么就有一些社会问题需要解决。

其他选项是git revert这些更改。然后将2个新的提交添加到历史记录中,这使得您不希望在项目历史记录中明确指出这两个提交。不太干净,但更容易处理。

+0

我的同事们会抱怨说,糟糕的承诺曾经在那里开始。在尝试合并分支之前最好摆脱它。感谢您提供'git rebase -i'答案,而不只是说“你不是真的想这么做!”像许多人一样! –

+0

在这种情况下,另一个有用的命令是'git push --force',以防你已经推送了错误提交。 –

+0

'--force'选项具有破坏性。如果其他人对你的提交进行了修改并将它们推送到版本库,那么你的强制推进将会破坏所有的提交。 –

10

首先,git reset HEAD~2放弃前两个提交,同时让您的工作树完全按照原样。然后,只需用你想要的创建一个新的提交(例如,用git add,然后用git commit)。

请参阅Reset Demystified作者:Scott Chacon了解经常易混淆的git reset comamnd的详细信息。

+1

我只会这样做是只提交本地,如果他们是公开的我会使用最后2次提交 – ryanzec

+0

是的,我假设OP没有推动任何地方的不正确提交。 –