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

时间:2013-09-26 20:16:35

标签: git

我有一个包含近千个文件的代码库。我在一个本地分支机构工作,有未提交的更改。在今天早些时候的某个时刻,我在一个文件中添加了一个error_log语句,该文件返回了一条非常有用的信息。我以为我已经完成了它所以删除了日志,就git而言,将文件返回到“未更改”状态。我需要把那个日志放回来,但不能为我的生活记住它是哪个文件或功能的一部分。

是否有任何git命令可以显示已对其进行更改的文件列表,即使更改已被删除?

4 个答案:

答案 0 :(得分:4)

我认为没有办法在git中执行此操作,但我会按照修改顺序递归列出文件。所以在linux中你应该可以做类似

的事情

ls -ltrR

您可以通过这种方式找到文件。哪个比什么都好。

答案 1 :(得分:0)

扩展Johnny的答案,并借鉴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

从repo root运行时,会显示最近修改过的文件。

答案 2 :(得分:0)

如果您在任何时候将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的文件列表。

答案 3 :(得分:-1)

未提交的更改始终错误。您应始终以小步骤工作,并在完成每个步骤后提交。 - 提交只是本地的,后来可以毫无问题地被压扁。

通过小的提交步骤,您可以随时返回每个步骤。 - 没有任何提交git无法帮助你恢复更改。

因此你必须看看git之外。就像文件系统的时间戳或编辑器的某些日志一样。