我怎样才能在Git中恢复丢失的提交?

首先,通过3次提交得到“你的分支在原点/主点之前”,然后我的应用程序已经恢复到较早的时间,并且有更早的更改。

我怎样才能得到我过去11个小时做的事情?


git reflog是你的朋友。 找到你想在列表中提交的内容,然后重新设置它(例如: git reset --hard e870e41 )。

(如果你没有提交你的修改......你可能会遇到麻烦 - 提前做出承诺,并经常提交!)


首先什么是HEAD

HEAD只是对当前分支中当前提交(最新)的引用。
任何时候只能有1个HEAD

如果你不是最新的提交 - 这意味着HEAD指向一个事先提交的被称为分离HEAD的历史记录。

在这里输入图像描述

几个选项:

git checkout

git checkout <commit_id>

git reflog

您也可以随时使用reflog

git reflog
git checkout HEAD@{...}

这会让你回到你想要的提交

在这里输入图像描述


git reset HEAD --hard <commit_id>

“移动”你的头回到所需的提交。

# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32

# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts, if you've modified things which were
# changed since the commit you reset to.
  • 注意:(从Git 2.7开始)
    你也可以使用git rebase --no-autostash

  • git checkout

    git checkout -b <new branch> <commit_id>
    git checkout HEAD~X // x is the number of commits t go back
    

    这将检出指向所需提交的新分支


    以下是可以完成的一般方案。

    在这里输入图像描述


    使用git fsck命令可以实现删除提交的另一种方式。

    git fsck --lost-found
    

    这将输出类似于最后一行的内容:

    dangling commit xyz
    

    我们可以根据其他答案中的建议检查它是否与使用reflog相同。 现在我们可以做一个git merge

    git merge xyz
    

    注意:
    如果我们已经运行了一个git gc命令,它将删除对悬挂提交的引用,我们无法使用fsck获得提交。

    链接地址: http://www.djcxy.com/p/59.html

    上一篇: How can I recover a lost commit in Git?

    下一篇: "Thinking in AngularJS" if I have a jQuery background?