【问题标题】:Git undo all changes with clearing reflog?Git通过清除reflog撤消所有更改?
【发布时间】:2019-04-18 15:53:39
【问题描述】:

如何撤消本地存储库中两个月内的所有工作更改(新分支、提交等)? Reflog 历史记录也需要清除。

【问题讨论】:

  • 您好,欢迎来到 SO。您是否有一些想要恢复的提交(哈希),或者您想要完全重新开始?有很多类似的问题,但我不知道它们是否是你要找的。请提供更多信息,以便我们为您提供帮助:) 编辑:可能重复:stackoverflow.com/questions/49067898/…
  • 使用git reset --hard 删除提交并使用git reflog expire 清除reflog。
  • 你好。我想按日期清除 git 中的所有本地更改。例如,我设置了 01.09.2018 并且该日期之后的所有工作(新分支、提交)和历史都将被删除。

标签: git undo


【解决方案1】:

这个问题将帮助你找到你想要的提交:How do I view all commits for a specific day? 在您的示例中,此命令列出的第一个提交就是您想要的:

git log --until="2018-09-01"

然后您可以使用@phd 的建议并将您的沙箱重置为该提交的 sha1:

git reset --hard <sha1>

警告:此重置命令还会将您当前分支的 HEAD 移动到该提交。这可能是您想要的,但您需要意识到这一点。

不幸的是,您必须一次为每个分支执行此操作,所以我意识到这不是您正在寻找的全局解决方案。

至于 reflog,我查看了 expire 的作用,它清除了旧的引用。我看不到如何删除 reflog 中的最新行,因为这与 reflog 的意图相反。但是,reflog 存储在.git/logs/HEAD 中。从该文件中手动删除行是可行的,但我没有找到一种简单的方法来查找哪些行在特定日期之后。如果您编辑此文件,请记住最近的条目位于末尾,而不是像 git reflog 所示的开头。

【讨论】:

    猜你喜欢
    • 2016-12-07
    • 2018-06-21
    • 2016-02-11
    • 2015-01-30
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 2021-02-17
    相关资源
    最近更新 更多