美文网首页Liiiinuxgit 学习
git reset 之后的恢复

git reset 之后的恢复

作者: mo阿蒙 | 来源:发表于2018-03-14 19:12 被阅读0次

又没有提交本地的修改,然后使用 git reset —hard 改变了分支的内容。上一次是直接没有 git add ,导致修改的文件全部消失,这样即使是 git 也没有办法恢复,只能重新写一遍。这次好了一点点,使用了 git add ,但是还没有提交,查找了一番之后还是恢复了。记录这个过程,谨记慎重在开发用的机器上面使用 git reset —hard

使用 git commit 提交过然后被 git reset 覆盖

比如一个例子,提交的 commit 记录如下:

    * f8b87f2 (HEAD -> new_branch) test 4
    * 48bf420 (master) test 3
    * 4ec574c test 2
    * 789a460 test 1

这时候使用了 git reset —hard ,提交记录变成如下:

    * 48bf420 (HEAD -> new_branch, master) test 3
    * 4ec574c test 2
    * e19fb7e test 1

没有远程仓库的情况下,如何才能恢复刚才丢失的 test 4 那条 commit 呢。可以使用 git reflog :

    48bf420 (HEAD -> new_branch, master) HEAD@{0}: reset: moving to master
    f8b87f2 HEAD@{1}: commit test 4
    48bf420 (HEAD -> new_branch, master) HEAD@{2}: checkout: moving from master to new_branch
    48bf420 HEAD@{3}: commit test 3
    4ec574c HEAD@{4}: commit test 2
    e19fb7e HEAD@{5}: commit test 1

可以看到每一次的操作都被记录了起来。要恢复到 test 4 的那一次提交,只需要执行:

    git reset f8b87f2

即可以恢复。

使用 git add 添加到了暂存区然后被 git reset 覆盖

这个时候需要恢复可以执行以下步骤:

    find .git/objects -type f | xargs ls -lt | seq 10q

这里的 10q 指的就是你最近添加的 10 条 add 的记录,根据你丢失文件的多少进行选择。然后出现的信息如下:

    .git/objects/00/8b61d60cc4829d438e54a4073f2fdd4b62ae74
    .git/objects/f8/b87f2108add14628c664ca467d440b5b99616f
    .git/objects/d5/0d6c1c2e8494ef1fa61404325b90d8a0f32423
    .git/objects/10/8a0a5571dd613691ab0af4c3c4fc691b7e2e06

objects 后面的部分就是一个 add 的ID,注意要去掉 / 符号。从上到下是最新的提交到旧的提交。执行:

    git cat-file -p 008b61d60cc4829d438e54a4073f2fdd4b62ae74 > hello

会将 add 中的文件重新写到新文件中,进行恢复。
此外,还有一种方法进行恢复。执行:

    git fsck --lost-found

然后去到 .git/lost-found 目录下面可以找到自己已经丢失的文件。文件不会是原来的名字,需要自己打开去查看和对比。

甚至都没有使用 git add 就使用 git reset 覆盖了本地修改

只能重写了。

相关文章

  • git reset 之后的恢复

    又没有提交本地的修改,然后使用 git reset —hard 改变了分支的内容。上一次是直接没有 git add...

  • Git常用命令

    版本回退git reset 回退add 操作Git 版本恢复还原命令 reset git reset –mixed...

  • Git版本回退以及前进

    git版本回退 然后使用命令git reset --hard commitId 如果回退之后想要恢复到现在版本,则...

  • git命令行

    git reset xxxxxxxxxxxxx 所有文件恢复到某一个历史版本git reset xxxxxxxxx...

  • git reset命令

    初始状态 执行git reset --soft HEAD~之后: 执行git reset HEAD~之后: 执行g...

  • git reset 恢复

    git reset head --hard 恢复git reflog查看操作记录如果在回退以后又想再次回到之前的版...

  • git 强制恢复

    git reset hahscode git push --force origin master可强制恢复到指定提交

  • Git reset 之后 怎么恢复到 reset 之前的节点

    首先定位到 工程目录\ .git\logs\refs\heads 这里会显示本地对应的分支名字(master、 d...

  • Git 删除某次 commit

    git resetgit reset :回滚到某次提交。git reset --soft:此次提交之后的修改会被退...

  • git 命令不定期更新

    这里对于常用的git checkout,git push等命令不予展示 恢复误删信息:git reset --ha...

网友评论

    本文标题:git reset 之后的恢复

    本文链接:https://www.haomeiwen.com/subject/zclqqftx.html