And*_*w C 19
目前尚不清楚您是否丢失了工作目录中的文件或索引中的文件.你说你丢失了"未分级文件",但是你提到你可能已经运行了"git add"."未分级文件"永远丢失了.
可以使用恢复分段文件
git fsck --full --unreachable --no-reflog
Run Code Online (Sandbox Code Playgroud)
对于添加的每个文件,将存在丢失的blob对象,并且对于每个目录条目,将存在树对象.您可以通过执行来恢复文件更改
git cat-file -p SHA
Run Code Online (Sandbox Code Playgroud)
对于您修改过的每个文件
(master)$ vi bar
(master)$ vi baz
(master)$ vi foo
(master)$ git add foo bar baz
(master)$ git reset --hard HEAD
HEAD is now at ead8fa2 initial
(master)$ git fsck --full --unreachable --no-reflog
Checking object directories: 100% (256/256), done.
unreachable blob 0c29287001b29159f11c4e8a320bce7e9789c00b
unreachable blob 1524d3478e3d0b92866a53239b10bcd4b3838c4d
unreachable blob 97b724e770249816c61d8a526415986208ed7e15
// take a look at one of the objects
(master)git cat-file -p 0c29287001b29159f11c4e8a320bce7e9789c00b
changes for bar
//Here, based on inspecting the output, I can determine that 0c29287 was the file "bar"
(master) git cat-file -p 0c29287 > bar
(注意我测试时没有丢失任何树木,所以这部分可能无效)
如果您修改了一大堆文件,则可能更容易通过树对象而不是单个文件进行恢复
git read-tree SHA
Run Code Online (Sandbox Code Playgroud)
其中SHA是根树的丢失树对象.
Usa*_*jad 10
如果有人在添加未暂存的文件之前犯了像我一样的错误git reset --hard,那么仍然有机会恢复这些更改。尽管这些文件在存储库中不再可用,但一些新的 IDE 保留了自己的历史记录。就像我的例子一样,我能够从Android Studio 的本地历史记录功能(位于 VCS 下)检索未暂存的更改。
路线:
所有未暂存/未提交的文件将通过git reset --hard删除
使用--hard不是因为该选项recomended 中移除了所有未分级/未提交的文件,而不是你应该藏起来,然后再使用正常复位
代替
git reset --hard HEAD@{n}
Run Code Online (Sandbox Code Playgroud)
你应该做
git stash
git reset HEAD@{n}
Run Code Online (Sandbox Code Playgroud)
然后将您的代码保存在存储堆栈中,您可以通过执行以下操作再次检索它
git stash pop
Run Code Online (Sandbox Code Playgroud)
尽管此命令将“隐藏的”更改与当前的HEAD合并(建议使用一个分支来实现隐藏),但要在生成这些隐藏的相同提交上进行隐藏检索
| 归档时间: |
|
| 查看次数: |
8214 次 |
| 最近记录: |