2013-09-26 157 views
1

我有一个包含近千个文件的代码库。我正在本地分公司工作,但未做任何更改。今天早些时候,我给一个文件添加了一条error_log声明,该文件返回了非常有用的信息。我认为我已经完成了它,所以删除了日志,就git而言,将文件返回到它的“不变”状态。我需要重新输入日志,但不能记住我的生活是属于哪个文件或功能的。Git - 查看已更改的文件,即使已删除更改

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

+0

[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

回答

4

我不认为有办法在git中这样做,但我会按照它们被修改的顺序递归列出文件。所以在Linux下,你应该能够做到像

ls -ltrR

你也许可以找到该文件这种方式。哪个比没有好。

+0

谢谢。不幸的是,我们在Windows上,而不是在Linux上。并且这些文件不在一个文件夹中;有很多子文件夹,所以我不能仅仅通过修改日期对整个代码库进行排序。 – EmmyS

+1

@EmmyS这种方法也适用于Windows。 Windows资源管理器允许您搜索文件(包括子目录),并为您提供找到的所有内容的一个大列表。在该窗口中,您仍然可以按修改时间进行排序。 – hvd

-1

未提交的更改是总是不好。您应该始终以小​​步骤工作,并在完成每个步骤后提交。 - 提交只是本地的,可以稍后在没有任何问题的情况下被压缩。

通过小的承诺步骤,您可以随时回到每一步。 - 没有任何提交git不能帮助你恢复更改。

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

+0

感谢您的演讲。这实际上并没有回答这个问题,这不是一个问题。我的提交很好。当我没有解决任何问题时,我没有看到这一点。 – EmmyS

+0

您要求提供git命令。 - 家庭真相是:没有。 (git只是不知道你的改变,除非你提交它们。) – michas

+0

然后你所要做的就是添加一个评论,说没有git命令。你的“答案”不是答案。 – EmmyS

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在添加或移除这些字符串的文件列表某个时间点。