Editing
Restoring deleted files in Git in Mandarin
(section)
Jump to navigation
Jump to search
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
= 復原 GIT 誤刪除的檔案 = {{LanguageSwitcher | content = [[Restoring deleted files in Git | EN]], [[Restoring deleted files in Git in Mandarin | 漢字]] }} == 復原方法 == === 方法一:透過 Fork 右鍵選單 === 使用 [https://git-fork.com/ Fork Git 客戶端軟體],並且對 <code>Deleted.file</code> 右鍵選擇了 '''Reset File to'''。 # 右鍵點擊被刪除的檔案 # 選擇 '''Reset File to''' → <code>State at Commit...</code> 或 <code>State Before Commit...</code> #* <code>State at Commit...</code> → 還原到某個特定 commit 的狀態 #* <code>State Before Commit...</code> → 還原到該 commit 之前的狀態 > '''建議:''' 直接用選單,點 <code>State Before Commit...</code> 即可快速還原到刪除前的狀態。 === 方法二:命令列 === > '''注意:''' 檔案路徑需要完全一樣(大小寫、目錄層級都要一致)。 1. 從最新 commit 還原 <pre lang="bash"> git checkout HEAD -- sub_folder/Deleted.file </pre> 2. 或從特定 commit 還原(用 commit hash) <pre lang="bash"> git checkout <commit_hash> -- sub_folder/Deleted.file </pre> === 方法三:從 Local Changes 還原 === 如果檔案還在 '''Local Changes''' 裡顯示為已刪除: # 點左側 '''Local Changes''' # 找到該檔案 # 右鍵 → '''Discard Changes''' == 常見問題 == === 很久前刪除的檔案,無法從 Fork 快速找到刪除檔案的哪一筆紀錄 commit hash === 如果還記得檔案名稱(大小寫要一致,但不清楚放在哪一個目錄): <pre lang="bash"> git log --all --full-history -- "**/Deleted.file" </pre> <code>**</code> 與 <code>*</code> 符號說明: # <code>**</code> 匹配任意層數目錄(包含零層) # <code>*</code> 只匹配單一層目錄或檔名中的任意字元 不確定路徑深度時建議用 <code>**</code>。 如果不確定檔名大小寫,用 <code>grep -i</code> 做大小寫不敏感的搜尋: <pre lang="bash"> git log --all --full-history --name-only --format="" | grep -i "deleted.file" </pre> 出現 N 次,代表這個檔案在 GIT 歷史中被修改過 N 次,有很多版本可以還原。找到正確路徑後,再用完整正確路徑去還原。 找到要復原的 commit hash: <pre lang="bash"> git log --all --full-history -- "**/Deleted.file" </pre> === 為什麼 <code>git show HEAD --name-only | grep Deleted.file</code> 沒有結果? === <code>git show HEAD --name-only</code> 只會列出'''最新那一筆 commit 有變動的檔案''',不是所有檔案,所以沒出現不代表不存在。 可能原因: * 這個檔案很久沒被修改,最近的 commit 根本沒動到它 * 檔案已經被刪除了 * 路徑不對 === 先確認檔案存在位置 === 看它現在存不存在於 working tree: <pre lang="bash"> find . -name "Deleted.file" </pre> 看目前 HEAD 裡有沒有這個檔案(不管有沒有被修改): <pre lang="bash"> git ls-files | grep Deleted.file </pre> == 參考資料 == * [https://git-scm.com/docs/git-restore Git 官方文件 - git-restore] * [https://git-scm.com/docs/git-log Git 官方文件 - git-log] * [https://www.git-tower.com/learn/git/faq/restoring-deleted-files How to Restore a Deleted File in Git - git-tower] * [https://rewind.com/blog/recovering-deleted-files-in-github/ Recovering Deleted Files in GitHub - Rewind] * [https://www.smashingmagazine.com/2023/12/recovering-deleted-files-git-working-tree/ Recovering Deleted Files From Your Git Working Tree - Smashing Magazine] * [https://www.atlassian.com/git/tutorials/git-log Advanced Git Log - Atlassian] * [https://github.blog/open-source/git/gits-database-internals-iii-file-history-queries/ Git's database internals III: file history queries - GitHub Blog] [[Category: Git]] [[Category: Revised with LLMs]]
Summary:
Please note that all contributions to LemonWiki共筆 are considered to be released under the Creative Commons Attribution-NonCommercial-ShareAlike (see
LemonWiki:Copyrights
for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource.
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Navigation menu
Personal tools
Not logged in
Talk
Contributions
Log in
Namespaces
Page
Discussion
English
Views
Read
Edit
View history
More
Search
Navigation
Main page
Current events
Recent changes
Random page
Help
Categories
Tools
What links here
Related changes
Special pages
Page information