可以撤销提交吗?

ast*_*ter 8 git

假设我们有一个存储库和5个提交:

  • 提交1
  • 提交2
  • 提交3
  • 承诺4
  • 承诺5

现在我意识到提交4和5是一个坏主意.我想完全删除在commit 4和5中提交的所有更改.如何做?

Gre*_*ton 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.这里的这个页面描述得非常好.

建议您git gc定期跑步; 一些命令也会自动为您执行此操作.这基本上在存储库上执行"内务处理",例如"压缩文件修订(以减少磁盘空间和提高性能)并删除无法访问的对象".在(默认值)30天后,无法访问的对象将从存储库中删除.可以使用配置选项更改此设置gc.reflogExpireUnreachable.


ska*_*lee 5

git revert commit_hash

它会恢复给定的提交.请注意,revert是另一个提交,它会从commit_hash中丢弃更改,而不是从存储库中删除给定的提交.