簡體   English   中英

Git - 查看已更改的文件,即使刪除了更改

[英]Git - see files that have been changed, even if the changes were removed

我有一個包含近千個文件的代碼庫。 我在一個本地分支機構工作,有未提交的更改。 在今天早些時候的某個時刻,我在一個文件中添加了一個error_log語句,該文件返回了一條非常有用的信息。 我以為我已經完成了它所以刪除了日志,就git而言,將文件返回到“未更改”狀態。 我需要把那個日志放回來,但不能為我的生活記住它是哪個文件或功能的一部分。

是否有任何git命令可以顯示已對其進行更改的文件列表,即使更改已被刪除?

我不認為有一種方法可以在git中執行它,但我會按照它們被修改的順序遞歸列出這些文件。 所以在linux中你應該能夠做類似的事情

ls -ltrR

您可以通過這種方式找到文件。 哪個比什么都好。

擴展Johnny的答案,並借用如何遞歸查找並列出具有子目錄和時間的目錄中的最新修改文件?

find . -path './.git' -prune -o -type f -print \
    -exec stat --format '%Y :%y %n' {} \; | sort -nr | cut -d: -f2- | head

從repo root運行時,這將顯示最近修改的文件。

如果您在任何時間點將error_log行提交到您的repo,那么該行的存在仍然存在於您的歷史記錄中,您可以通過幾種不同的方式恢復它。 最直接的是簡單地在git log使用補丁輸出,並假設輸出被傳遞給less pager,然后只需點擊/並輸入該行的正則表達式:

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無法幫助您恢復更改。

因此你必須看看git之外。 就像文件系統的時間戳或者編輯器的某些日志一樣。

暫無
暫無

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

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