我上传了大量用于提交的文件。
然后我意识到最好只提交两个文件, 然后在单独的提交中提交剩余的。
git reset <filename>
unstages filename
我想取消所有内容,
然后重新启动两个文件,并提交
然后暂存所有正在重写的文件并再次提交。
As:“git add .
”(将所有文件添加到临时区域)
和“git reset <filename>
”(从暂存区域中删除文件名)
“git reset .
”(似乎有意义删除所有文件)
糟糕..!
将我的工作目录恢复为最后提交的版本,
- 我丢失了我所做的所有文件编辑! : - (
无论如何要“撤消”“git reset .
”??
我没有找到任何关于此的文件
事实上,我根本没有找到关于“git reset .
”的任何文件
我最好的猜测是,git将“.
”作为选项的值,而不是filename选项。
但是这可以撤销吗?
答案 0 :(得分:2)
你从未犯过这些修改,所以不,这是不可能的......
请确保我知道你的痛苦是什么感觉......好消息是你再也不会犯这个错误了!
答案 1 :(得分:1)
是的!,事实证明,你可以!!
原因如下: 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上发现的以下链接:
这个特别有用,有很好的解释!
Undo git reset --hard with uncommitted files in the staging area
其他:
很好,解释清楚的信息:
How can I undo 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)