我怎样才能在Git中恢复丢失的提交?
首先,通过3次提交得到“你的分支在原点/主人之前”,那么我的应用程序已经恢复到较早的时间。
我怎样才能得到我最近11个小时做的事?
git reflog
是你的朋友。 find你想要在列表中的提交,你可以重置它(例如: git reset --hard e870e41
)。
(如果你没有做出改变……你可能会遇到麻烦 – 提早做出决定,经常做出决定!)
首先什么是头?
HEAD
只是对当前分支中当前提交(最新)的引用。
在任何时候只能有一个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
命令。
git fsck --lost-found
这将输出像在最后一行:
dangling commit xyz
我们可以根据其他答案中的build议检查是否使用了reflog
。 现在我们可以做一个git merge
git merge xyz
注意:
如果我们已经运行了一个git gc
命令,它将删除对悬挂提交的引用,我们不能用fsck
获得提交。