簡體   English   中英

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

[英]Undo 'git reset --hard' before first commit

基本上我在本地機器上有一個代碼庫,我運行:

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 ...

您可以應用的第一個過濾器,以嘗試node_modules/文件:

  • 在上面的 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下的列表...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM