【问题标题】:Lost Last Git Commit丢失最后一次 Git 提交
【发布时间】:2011-01-21 20:11:37
【问题描述】:

我丢失了上一次提交,因为我不小心运行了“git reset --hard HEAD^”。注意:我不想把“^”放在最后。

有什么办法可以找回来吗?这是2天的工作:(

【问题讨论】:

  • 无论如何,不​​要使用 git gc。这将永久删除未链接的提交。
  • 不,gc 不会 丢失该提交,除非您竭尽全力让 git 更容易忘记您的提交(禁用或积极修剪)。任何花足够时间学习如何配置 git 以丢失最近提交的人至少知道不要问这个问题。
  • git gc 默认情况下,如果未引用的提交(默认情况下)在 reflog 中最多 30 天,则不会删除未链接的提交。

标签: git version-control commit


【解决方案1】:

我认为this article 是您正在寻找的。根据文章,您的提交已“消失”,但没有被垃圾收集 - 有点像 Windows 中的回收站。

您运行git fsck --lost-found 来查找“悬空提交”,并使用git reflog 查看它,然后将悬空提交与您当前的分支git merge 7c61179 合并。

【讨论】:

  • 谢谢。做到了。我知道它只是漂浮在某个地方,与分支无关。
  • 结合 difftool,我解决了我的“丢失提交”问题: git fsck --lost-found (显示悬空提交哈希) git difftool SOME_HASH somefolder/ (我已经尝试了所有悬空提交,直到我找到需要的)
【解决方案2】:

git 使返回之前的状态变得非常容易,并且非常努力地防止您丢失已提交的任何数据。这就是你应该经常提交的原因。我有一个命令 git trash 执行 git reset --hard 状态,但是在编写提交之后,我可以在需要时撤消硬重置。

对于最近的状态(即您的确切情况),只需执行 git reset --hard ORIG_HEAD 即可撤消您刚刚所做的操作。

您可以进行基于时间的重置git reset --hard '@{5 minutes ago}' 根据时间将自己置于先前的状态(您可以使用很多选项,例如,git reset --hard '@{yesterday}' 假装今天从未发生过)。

否则,请浏览git reflog 输出以找到在您认为操作使您处于不良状态之前的事物并重新设置。

【讨论】:

  • 更一般的你可以使用@{1},或HEAD@{1},而不是ORIG_HEAD
【解决方案3】:

如果您知道提交 ID(例如,在终端上向后滚动或使用 git reflog),

git reset --hard 61567de5d9

其中 61567de5d9 是最新(丢失)提交的第一个数字。

【讨论】:

    猜你喜欢
    • 2019-03-27
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多