我有一個包含近千個文件的代碼庫。我正在本地分公司工作,但未做任何更改。今天早些時候,我給一個文件添加了一條error_log
聲明,該文件返回了非常有用的信息。我認爲我已經完成了它,所以刪除了日誌,就git而言,將文件返回到它的「不變」狀態。我需要重新輸入日誌,但不能記住我的生活是屬於哪個文件或功能的。Git - 查看已更改的文件,即使已刪除更改
是否有任何git命令可以顯示已更改的文件列表,即使這些更改已被刪除?
我有一個包含近千個文件的代碼庫。我正在本地分公司工作,但未做任何更改。今天早些時候,我給一個文件添加了一條error_log
聲明,該文件返回了非常有用的信息。我認爲我已經完成了它,所以刪除了日誌,就git而言,將文件返回到它的「不變」狀態。我需要重新輸入日誌,但不能記住我的生活是屬於哪個文件或功能的。Git - 查看已更改的文件,即使已刪除更改
是否有任何git命令可以顯示已更改的文件列表,即使這些更改已被刪除?
擴大對約翰尼的答案,從How to recursively find and list the latest modified files in a directory with subdirectories and times?借款:
find . -path './.git' -prune -o -type f -print \
-exec stat --format '%Y :%y %n' {} \; | sort -nr | cut -d: -f2- | head
當從回購root身份運行,這將顯示最近修改的文件。
未提交的更改是總是不好。您應該始終以小步驟工作,並在完成每個步驟後提交。 - 提交只是本地的,可以稍後在沒有任何問題的情況下被壓縮。
通過小的承諾步驟,您可以隨時回到每一步。 - 沒有任何提交git不能幫助你恢復更改。
因此,你必須看看外面的混帳。就像文件系統的時間戳或者編輯器的某些日誌一樣。
如果您在任何時間點將error_log
行歸入您的回購行,那麼該行的存在依然存在於您的歷史記錄中,您可以通過多種不同方式恢復它。最直接的就是簡單地使用補丁輸出在git log
,並假設輸出被傳遞到less
尋呼機,你則只需點擊/
,並輸入一個正則表達式該行:
git log -p
# While in `less`
/error_log
然後,您可以通過點擊n
前進到下一個匹配,或N
返回最後一個搜索輸出的正則表達式。
另一種方法來找到該行的存在(假設它承諾)是使用-S
或-G
選項git log
。前者搜索添加或使用固定字符串文本的缺失,而後者也使用正則表達式:
# Fixed string
git log --name-status -S "error_log"
# Regex
git log --name-status -G "error_log"
輸出將是要麼有error_log
在添加或移除這些字符串的文件列表某個時間點。
[Git recover uncommitted changes](http://stackoverflow.com/questions/3240436/git-recover-uncommitted-changes)可能的重複。到達那裏的不同方式,但不幸的是git不能告訴你。 [經常提交](http://en.wikibooks。組織/維基/ Commit_Often,_Perfect_Later,_Publish_Once:_Git_Best_Practices/Commiting_early_and_often)! – cmbuckley