git - 第一次提交前撤消 'git reset --hard'

标签 git

基本上我在本地机器上有一个代码库,我运行:

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.jssrc/model/my_model.js ...<

您可以应用的第一个过滤器是:

  • 在上面的 blob 列表中,尝试找到您的 package.json 文件(grep -e some_package_I_remember),
  • 将其重命名为 package.json(您可能还会找到锁定文件),然后运行 ​​npm installyarn 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/

相关文章:

git - 警告 : ignoring broken ref refs/remotes/origin/HEAD

git - 如何将 Ansible Git 安装到现有目录中

git - 无法使用 "Git add -i"

git - 维护两个 github 用户帐户

git - VS 2017 - 团队资源管理器提交 - 快捷方式

git - 调试 'repo upload' 问题 - 权限被拒绝(公钥)

ios - 在 xcode 中更改 git 的用户名

git - 无法推送或 pull 到 Github

git log - 行太长 - 没有换行符

git - 推送到 Gist 返回奇怪的错误