我有一个包含近千个文件的代码库。我在一个本地分支机构工作,有未提交的更改。在今天早些时候的某个时刻,我在一个文件中添加了一个error_log
语句,该文件返回了一条非常有用的信息。我以为我已经完成了它所以删除了日志,就git而言,将文件返回到“未更改”状态。我需要把那个日志放回来,但不能为我的生活记住它是哪个文件或功能的一部分。
是否有任何git命令可以显示已对其进行更改的文件列表,即使更改已被删除?
答案 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之外。就像文件系统的时间戳或编辑器的某些日志一样。