簡體   English   中英

如何在Git中搜索“丟失”文件/更改?

[英]How to search for “lost” file/changes in Git?

我似乎弄亂了我的本地存儲庫。

我知道我在幾周前處理的特定文件中有一些內容。 在多次合並之后,提交壓縮和其他類型的歷史記錄重寫我現在注意到這個內容丟失了。 我也找不到我在這里添加這些更改的提交。

我之前讀過有“孤立”分支和提交的本地副本。 有沒有辦法以某種方式搜索這些特定的文件或關鍵字?

git fsck命令可用於列出--unreachable--lost-found提交。

由於此時的輸出很難讀取,我建議將找到的哈希值給git log以便它們在參考其余提交時顯示。

git log --graph --all --numstat --oneline --decorate --full-history --date-order --color <Put Refs Here>

--numstat命令將顯示每次提交中更改了哪些文件,並希望幫助您找到文件/數據。

感謝對我的問題的一些評論,我知道reflog是尋找這些提交的可能命令之一。

我通常使用GUI來使用Git(SourceTree或GitKraken),所以我在命令行上有點迷失。 從理論上講,我知道如何找到這些文件: git reflog ,然后可能是git show來獲取更改文件和diff來篩選所有這些文件(我確信有更好的方法可以做到這一點,但我沒有經驗這里有CLI)。 但是,正如我也沒想到,當上個月我做了這些變化,並在那里迷路了,這看起來並不像我的解決方案。


經過一些谷歌搜索后,我找到了SmartGit 它是另一個git GUI,但它實際上支持顯示這些丟失的提交及其上下文。 以下是我在博客文章中寫下的指示:

我們正在“Log”視圖中尋找“Recyclable Commits”分支:在SmartGit中打開存儲庫,右鍵單擊“Repositories”面板中的存儲庫,在上下文菜單中選擇“Log”,然后在打開的“Log”中“查看,在”分支“面板中選擇”可再循環提交“,另外選擇已選擇的分支或”HEAD“:

“recaclyble commit”輸出的示例

淺橙色條目(相對於粗體黑點)是“孤兒”,不再是當前樹的一部分。

您可以使用“過濾器”輸入過濾掉這些內容,可以選擇搜索文件名甚至文件內容! (所以我可以輸入我知道我已經把我的內容放入的文件名,只查看這些相關的提交 - 甚至搜索我知道我在文件中寫過的幾個單詞 - 這真是太棒了!)

重要且非常有用的是,這些提交顯示在當前樹的上下文中,因此您可以單擊各個提交並查看其包含的文件更改,單擊文件以查看正常情況下的差異。 比在命令行上容易得多。

找到丟失的提交后,或者手動將文本復制到編輯器,或者通過右鍵單擊並選擇“Cherry-Pick ...”將所有更改提交到當前分支。 然后照常提交(並且稍微跳舞,因為你剛剛保存了幾天的工作)。

發現,發現內容已恢復。

暫無
暫無

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

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