我有一个包含近千个文件的代码库。我正在本地分公司工作,但未做任何更改。今天早些时候,我给一个文件添加了一条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