18

硬重置后我可以恢复以下提交吗?

脚步:

1) $ (master) // ....made a bunch of changes to files thinking I was working on a branch
2) $ git checkout -b 001-branch  // copy changes to a branch to work with
3) $ (001-branch) // make some more changes to files
4) $ (001-branch) git commit -a -m 'added and changed stuff'
// at this point I was just going to pull force master to latest then rebase my 001-branch off of original master (not the stuff I had modified)
5) $ (001-branch) git checkout master
6) $ (master) git reset --hard HEAD
7) $ (master) git pull
8) $ (master) git checkout 001-branch // go back to my branch and rebase my changes
9) $ (001-branch) // oops...my changes were all kiboshed and I don't see the commit I did per git lg

有什么办法可以摆脱这种混乱来恢复我的更改?

4

4 回答 4

19

要查看对 001-branch 所做的所有更改,您可以这样做git reflog 001-branch,但是,您可能认为您在 001-branch 中所做的事情可能您做了另一个分支,因此您可能需要使用 .查看所有更改git reflog

于 2013-11-11T04:04:23.553 回答
15

是否git reflog show打印丢失提交的哈希?如果是,那么git checkout -b recovery-branch commitId将创建一个指向丢失提交的新分支。然后,您可以根据需要合并。

于 2013-11-11T04:00:30.247 回答
5

每次 git 做一些剧烈的事情,比如改变或倒带分支时,它都会在 reflog 中记录下来。换句话说,仔细检查 的输出git reflog,它会告诉你分支曾经有过的所有转换。然后,您可以使用git show commit_id来检查并git checkout commit_id返回。

于 2013-11-11T04:00:52.493 回答
4

老实说,我不明白发生了什么。

git reflog打印分支指向的提交。您可以使用它来查找最近本地提交的 SHA1 总和。

于 2013-11-11T04:00:55.390 回答