我犯了两次错误。如何恢复两个提交并只提交好东西?
答案 0 :(得分:13)
首先,git reset HEAD~2
放弃前两个提交,同时完全保留工作树。
然后,只需创建一个包含所需内容的新提交(例如,使用git add
s然后git commit
)。
请参阅Scott Chacon的Reset Demystified,了解常常令人困惑的git reset
comamnd的详细信息。
答案 1 :(得分:12)
您可以执行git rebase -i HEAD~2
,然后使用该界面丢弃此后的“错误提交”并清理历史记录。然而,这会改变项目历史,如果您已经推动(以及其他人推动)您的更改,那么可能需要解决一些社会问题。
另一个选项是git revert
这些更改。然后将2个新提交添加到历史记录中,这使得您不希望在项目历史记录中显式显示这两个提交。不太干净但更容易使用。
答案 2 :(得分:0)
如果您想完全撤消提交并将其删除,请像其他答案一样使用rebase
或reset
。
但是有时候,您不能修改git历史记录(例如,在推送到远程受保护的分支之后)。在这种情况下,最好的选择是git revert
:
git revert --no-commit HEAD~1^..HEAD
这将还原最近两次提交中的所有更改(从HEAD
到HEAD~1
)。您可以通过检查状态或diff并提交还原来确保一切正常:
git status # or git diff
git commit -m "Reverted the last two commits"