假设我们有一个存储库和5个提交:
现在我意识到提交4和5是一个坏主意。我想完全删除在提交4和5中提交的所有更改。如何做?
答案 0 :(得分:6)
如果提交4和5仅在您的存储库中,并且没有被任何其他存储库推送或拉动,您可以简单地:
git reset --hard SHA1_HASH_OF_COMMIT_3
您可以使用git log
找出提交的SHA1哈希,或者您可以使用更高级的命名技术,请参阅git help rev-parse
,特别是“指定修订”部分。
使用此命令将使分支提示无法访问提交4和5。但是,这些提交不会丢失,因为这些提交保存在分支的reflog中。您可以使用git reflog
来标识无法访问的提交。然后可以使用另一个git reset --hard
进行恢复。这个页面here很好地描述了这一点。
建议您定期运行git gc
;一些命令也会自动为您执行此操作。这基本上在存储库上执行“内务处理”,例如“压缩文件修订(以减少磁盘空间和提高性能)并删除无法访问的对象”。在(默认值)30天后,无法访问的对象将从存储库中删除。可以使用配置选项gc.reflogExpireUnreachable
更改此内容。
答案 1 :(得分:5)
git revert commit_hash
它会恢复给定的提交。请注意,revert是另一个提交,它会从commit_hash中删除更改,而不是从存储库中删除给定的提交。
答案 2 :(得分:3)
我可能会从commit 3创建一个新的分支。
git checkout -b commit3
然后从该提交中修改主数据
http://git-scm.com/docs/git-rebase
当然,你正在使用主题分支来保持你的开发分支,直到你知道它们是个好主意,对吧?