是的!,事实证明,你可以!
原因如下: git 解释git reset .
为git reset --hard
这样就删除了我工作目录中的所有更改,将所有内容恢复到我上次提交的状态。
没有内置方法可以恢复我丢失的文件编辑。
但是,git add .
保存了其中包含这些编辑的每个文件的副本。
我们只需要掌握在何处/如何git
保存所述文件的状态即可。
简而言之,请执行以下步骤:
(1):
git fsck --cache --unreachable $(git for-each-ref --format="%(objectname)") \
$(egrep commit all | cut -d ' ' -f 3) > stagedNotCommitted
这将找到 git 已索引的文件列表(因为它们已被暂存)
但从未提交,并将其放入名为
stagedNotCommitted
由于 git 不知道这些文件的文件名,stagedNotCommitted
因此将列出索引文件的哈希值。看起来像
`369c722e8df1c83b6ebfc0dc2d426aa612535203
63282280da679aa19d6a2a71e08bed8487f7e688
6a540aa36ee558611528176dbf87ad8e39475222
9c8ce87dd8aff2abc78d8a5dbe976473c6fea3de
9e20a6530229dac42cb87dc0a7153edb4bad96b5
abec86bc81f8b473e5ea8f0320589619d5e726b2
b830a382cd30308782a1df12e553227100b47ba4
c8bc4788fee301c8c88ed29739927689742c55bf
f87c9f32da264e5e0b9de3d1818e291a687adab9`
...
(2) :
从这里您可以在文本编辑器中打开每个文件(我使用的是 Sublime),然后以正确的名称保存您希望恢复的文件。
我这样做的方法是将每个“无法访问的博客”保存到一个临时文件中:(
您可以只使用每个文件的前几位数字)
$ git show 89f45 > _02_89f45
$ git show 07f9c > _03_07f9c
$ git show 23ad5 > _04_23ad5
...
从那里以崇高的方式打开所有这些文件很容易。
只需使用适当的名称重新保存即可。
完毕 !!:-)
请注意,这仅适用于我已经暂存了我想要恢复的所有文件。
如果我没有上演(全部)他们,我会失去运气。(或者只能恢复其中的一部分。)
有关更多信息,请访问我在 StackOverflow 上发现有用的以下链接:
这个特别有用,有很好的解释!
使用暂存区域中未提交的文件撤消 git reset --hard
其他:
很好,解释清楚的信息:
如何撤消 git reset --hard HEAD~1?
这个还有一个帖子链接了一个声称可以为你做的插件:
Recovering added file after doing git reset --hard HEAD^
最后,这是一个有趣的表格:
https ://www.atlassian.com/git/tutorials/resetting-checking-out-and-reverting/summary
Command Scope Common use cases
git reset Commit-level Discard commits in a private branch or throw away uncommited changes
git reset File-level Unstage a file
git checkout Commit-level Switch between branches or inspect old snapshots
git checkout File-level Discard changes in the working directory
git revert Commit-level Undo commits in a public branch
git revert File-level (N/A)