簡體   English   中英

Git:在推送之前本地刪除后可以恢復文件嗎?

[英]Git: Recovery of files possible after local remove before push?

我想通過刪除每個 JPG 文件在推送之前“清理”我的 git repo,所以我輸入:

find . | xargs rm *.png

在 git root 中,現在一切都已刪除 我的 *.py 文件也被刪除了,但我不知道為什么? 它是一台 Linux 和 Ubuntu 機器。 有機會恢復我的文件嗎? 也許在我的操作系統上?

您輸入的命令完全錯誤:

find .

此命令輸出下面的每個文件和目錄的名稱. ,包括隱藏文件。

xargs

這個命令接受它的輸入並運行作為參數給出的命令,一次輸入一行作為參數。 因此,它將運行rm *.png <line1_from_find> ,然后rm *.png <line2_from_find>等。

沒有像停止錯誤這樣的保護措施,所以如果你讓命令完全運行,它會取消所有文件的鏈接,你知道有一個空的目錄樹。 git不會幫助你,因為它的工作原理是將元數據和當前狀態存儲在工作目錄根目錄下的.git目錄中。 您剛剛刪除了其中的所有文件。

所以不,除非您手動或通過將狀態推送到其他地方進行復制,否則它可能已經消失,但請參見下文。 為了將來參考,以下是銷毀所有以 png 結尾的文件的正確命令:

find . -name '*.png' -delete

如果您的目錄以.png結尾,則可以在-delete之前添加-type f以將其過濾掉。


好的,現在怎么辦:碰巧git將其某些內部狀態標記為只讀,如果您沒有使用rm -f並且您可能能夠從中恢復一些數據,則rm尊重它。 轉到工作目錄根目錄下的.git目錄。 它將包含一個objects目錄,一些文件可能在那里幸存下來。

這些文件是原始壓縮流,您可以使用該命令查看其內容:

 zlib-flate -uncompress <path_to_the_file

(zlib-flate 命令來自 ubuntu 上的 qpdf 包)

對我來說,以下工作:

$ git checkout -- name_of_deleted_directory

或者

$ git checkout -- path_to_local_delected_directory

就我而言,我錯誤地刪除了一個目錄,我沒有更改該目錄中的任何代碼,但是我更改了 git repo 的其他目錄中的代碼。

暫無
暫無

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

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