我正在使用源代碼樹。我創建了一個多個更改的存儲,並將其刪除。有沒有辦法找回他們?使用SourceTree在Git中檢索已刪除的存儲
回答
隱藏在內部被保存爲一個合併提交,從一個列表中引用。
git fsck
可以找到懸掛的物體。它會發現不僅僅是你刪除的隱藏,也可能是其他的東西,所以你會想要尋找提交,看起來他們可能是你的存儲(git show <ID>
顯示有關對象的相關信息,並決定它是否是一個你正在尋找)。
一旦你有了,你需要做的就是重新插入它的列表中。該列表存儲在.git/logs/refs/stash
和行具有以下格式:
<ID of previous stash commit in list or 0000000000000000000000000000000000000000 if none> <ID of merge commit> Your Name <[email protected]> <UNIX timestamp> <time zone, e.g. +0000><TAB char><description of stash>
這裏有一個工作示例:
16b9a2d400dafe7ea25592029e3e5582d025c7d8 5def7605dfe625e8b3a3152fe52a87cc36694b6a Jan Krüger <[email protected]> 1374227992 +0200 WIP on master: 0dbd812 Update draft release notes to 1.8.4
就合成了藏匿要行重新插入(名稱/郵件/時間戳/描述不要有是準確的),你應該能夠正常使用它。
快樂狩獵!
我運行'''git fsck'''命令,它給了我大約100個GUID。有沒有更簡單的方法來解決這個問題?我的意思是更多的視覺? – Tushar
它不可能通過100 guids!請建議一個更簡單的方法。 – Tushar
這是我知道的唯一方法。但是,你可以使用下面的方法減少它:'git fsck --unreachable';並直接得到一個清單的細節,可能是這樣的:'for i in $(git fsck --unreachable --no-dangling 2> |/dev/null | grep commit | cut -d''-f3);做git - 無記錄器日誌-1 $ i;完成|少' –
像以前的答案狀態一樣,您可以使用git fsck
來列出 未被包含您刪除的藏匿物的任何物品引用的物品。但是,它 可以使用git show
篩選對象的該列表僅顯示 藏匿處,如:
git fsck 2> /dev/null |
awk '/commit/{print $3}' |
git show --stdin --merges --grep '^WIP on'
如果您知道創建藏匿時,你還可以添加一個參數像 --since '2 days ago'
到最後以進一步限制輸出。希望這會將名單減少到可管理的規模。
找到正確的存儲後,記下它的提交ID,並且可以使用 git stash apply COMMITID
來應用它,就像它沒有被刪除一樣。
「since」選項對我來說不起作用 – IcedDante
正如JanKrüger所述,git fsck
就是要走的路。但是,如果您發現自己無法(無論出於何種原因)成功合成存儲文件中的一行並使存儲顯示在可用列表中,則可以直接使用git stash apply <guid>
,而不添加該行。這將立即應用(不提交)文件(s)更改到您當前的分支。
基於上述答案,這裏是一個簡單的序列:
打開一個終端窗口和CD到存儲庫下的文件夾。然後:
git fsck | awk '{print $3}' > tmp.txt
cat tmp.txt | xargs git show > tmp2.txt
編輯器現在打開tmp2.txt,找到丟失的代碼,並找到提交-ID在它的上面。然後應用代碼:
git stash apply <commit id>
rm tmp.txt tmp2.txt
這救了我的命!我真的很感謝所有回答這個問題的人。我保佑git的創造者Linus Torvalds保留刪除的東西在git數據庫。天才!!
我對git相當陌生,這絕對挽救了我的生活,恢復了工作的日子。謝謝 – RyuAkamatsu
我同意。我只是按照這些步驟,並在我無意中刪除(彈出)存儲後恢復了3天的工作。 – bholben
我見過最好的答案。感謝捆綁! – Andrew
for i in $(git fsck 2>|/dev/null | grep commit | cut -d' ' -f3); do git --no-pager log -1 $i; echo "-------------------------"; done | less
然後找到提交ID#。
,做
git stash apply {commit#}
另一種解決方案是:
git fsck 2>&1 | awk '/dangling commit/{print $3 "^!"}' | xargs git log
您是否使用SourceTree用於查找作者和提交信息(日期,哈希,作者等)
git stash store <hash-id-of-specific-commit>
我試了幾個腳本,但這個工作沒有錯誤或給我隨機/ n數據。 – Zammbi
- 1. 使用SourceTree刪除Git存儲庫而不刪除磁盤上的文件
- 2. 恢復已刪除的git存儲庫
- 3. SourceTree git存儲丟失
- 4. 在git中檢索已刪除的文件
- 5. Git如何檢索從本地和遠程存儲庫中刪除的已刪除文件?
- 6. 從SourceTree或Git恢復已刪除的文件
- 7. JGit刪除git存儲庫
- 8. 使用git刪除不在本地存儲庫中的分支
- 9. Git/SourceTree:如何刪除分支?
- 10. 用Cloudant檢索已刪除的文檔
- 11. 如何使用SourceTree創建新的git存儲庫?
- 12. git svn保存已刪除的分支
- 13. git - 從存儲庫中刪除文件
- 14. git從存儲中刪除文件
- 15. 從存儲庫中刪除git corrupt blob
- 16. Git:從存儲庫中刪除憑證
- 17. 意外從Git存儲庫中刪除
- 18. Git從存儲庫中刪除* .sln.docstates
- 19. 如何在git存儲庫中列出所有已刪除的文件?
- 20. 檢索已刪除的網頁
- 21. Drupal - 已刪除的塊 - 如何檢索
- 22. 檢索已刪除的日曆事件?
- 23. 檢索已刪除的Facebook郵件
- 24. 如何使用Windows Tortoise從Git存儲庫中刪除文件?
- 25. 在GIT中刪除「在外部存儲庫」中的文件
- 26. 是Git中SourceTree
- 27. 已上傳的文件存儲/檢索
- 28. 如何在Git中從遠程存儲庫中刪除已刪除的文件夾?
- 29. 如何使用c存儲和檢索和刪除documetDB中的列表#
- 30. git checkout已刪除文件在Mercurial中?
Windows還是Mac? Mac版本在功能方面一直領先於Windows版本。 – 2014-05-05 04:13:35
可能相關:[在git中恢復丟棄的存儲](http://stackoverflow.com/q/89332/456814)。 – 2014-05-05 04:15:27
@Cupcake我一直在使用Mac版本。 – Tushar