-1

我上演了大量文件以供提交。

然后我意识到最好只提交两个文件,然后在单独的提交中提交剩余的文件。

git reset <filename>取消暂存文件名

我想取消暂存所有内容,
然后重新暂存两个文件并提交。
然后暂存所有剩余文件并再次提交。

如:“ git add .”(将所有文件添加到暂存区)
和“ git reset <filename>”(从暂存区删除文件名)
“ ”(取消暂存git reset .所有文件似乎有意义)

哎呀..!
这将我的工作目录恢复到最后提交的版本,
- 我丢失了我所做的所有文件编辑!:-(

无论如何要“撤消”“ git reset .”?

我没有找到任何关于此的文档。
事实上,我根本没有找到任何关于“ git reset .”的文档。
我最好的猜测是 git 将“ .”作为选项的值,而不是文件名选项。

但这可以撤消吗?

4

2 回答 2

2

你从来没有提交过这些修改,所以不,这是不可能的......

请放心,我知道你的痛苦是什么感觉……好消息是你永远不会再犯这个错误了!

于 2016-04-04T06:08:11.913 回答
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 上发现有用的以下链接:

这个特别有用,有很好的解释!
使用暂存区域中未提交的文件撤消 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)

于 2016-04-07T09:26:05.113 回答