基本上我在本地机器上有一个代码库,我运行:
git init
git add .
此时,我意识到我想添加一个 .gitignore 文件。
所以我认为我需要取消暂存提交,并且在一个业余的举动中,执行了以下命令
git reset --hard
现在我的整个代码库都不见了...
是否可以撤消此操作!?
最佳答案
git add .
已将文件的内容 添加到 git 中;不幸的是,它没有创建一个“目录”结构来列出您的文件及其名称。
你可以做什么:
运行
git fsck --full --unreachable --no-reflog | grep blob > blobs.txt
# the content of blobs.txt will look like :
unreachable blob 08bf360988858a012dab3af4e0b0ea5f370a2ae8
unreachable blob 21bf7ea93f9f9cc2b3ecbed0e5ed4fa45c75eb89
unreachable blob 08c12ef37075732cf4645269ab5687ba6ba68943
...
对于这些 blob 中的每一个,您都可以将内容转储到磁盘:
cat blobs.txt | awk '{ print $3 }' | while read blobid; do
git show $blobid > $blobid.txt
done
您现在将拥有一个文件列表:
08bf360988858a012dab3af4e0b0ea5f370a2ae8.txt
21bf7ea93f9f9cc2b3ecbed0e5ed4fa45c75eb89.txt
08c12ef37075732cf4645269ab5687ba6ba68943.txt
...
好消息是:初始 git add 中存在的所有文件。
应该在那里表示。
坏消息是:
- 此列表还将包含您最初想要忽略的文件(我假设您添加了
node_modules/
文件夹,因此您将拥有您添加的所有 js 库的代码...), - 您必须找出哪些文件去了哪里,并将它们重命名为
src/my_controller.js
、src/model/my_model.js
...<
您可以应用的第一个过滤器是:
- 在上面的 blob 列表中,尝试找到您的 package.json 文件(
grep -e some_package_I_remember
), - 将其重命名为
package.json
(您可能还会找到锁定文件),然后运行 npm install
或yarn install
- 这应该会创建一个
node_modules/
文件夹,它看起来很像您之前的文件夹 - 添加
node_modules/
文件夹,并创建一个提交, - 现在,node_modules 中的 blob 不再不可访问;重新运行上面的
git fsck ... > blobs.txt
,您应该在node_modules
下有一个 不是 的列表。 .
关于git - 第一次提交前撤消 'git reset --hard',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63118031/