【问题标题】:Git - see files that have been changed, even if the changes were removedGit - 查看已更改的文件,即使更改已被删除
【发布时间】:2013-10-02 23:45:40
【问题描述】:

我有一个包含近千个文件的代码库。我在本地分支工作,未提交更改。今天早些时候,我在一个文件中添加了error_log 语句,该文件返回了一条非常有用的信息。我以为我已经完成了它,所以删除了日志,就 git 而言,将文件返回到其“未更改”状态。我需要重新登录该日志,但我一生都无法记住它属于哪个文件或功能。

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

【问题讨论】:

标签: git


【解决方案1】:

我认为在 git 中没有办法做到这一点,但我会按照文件被修改的顺序递归地列出文件。所以在linux中你应该可以做类似的事情

ls -ltrR

您也许可以通过这种方式找到该文件。有总比没有好。

【讨论】:

  • 谢谢。不幸的是,我们使用的是 Windows,而不是 Linux。并且文件不在一个文件夹中;有很多子文件夹,所以我不能只按修改日期对整个代码库进行排序。
  • @EmmyS 这种方法在 Windows 上也应该可以正常工作。 Windows 资源管理器允许您搜索文件,包括子目录,并为您提供它找到的所有内容的大列表。在该窗口中,您应该仍然可以按修改时间排序。
【解决方案2】:

扩展约翰尼的答案,并借用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 根目录运行时,这将显示最近修改的文件。

【讨论】:

    【解决方案3】:

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

    通过小的承诺步骤,您始终可以返回到每个步骤。 - 如果没有任何提交,git 无法帮助您恢复更改。

    因此你必须在 git 之外寻找。比如文件系统的时间戳或者你的编辑器的一些日志。

    【讨论】:

    • 感谢您的讲座。这实际上并不能回答问题,这不是问题。我的承诺很好。当我没有解决任何问题时,我没有看到提交的意义。
    • 你要求一个 git 命令。 - 家庭事实是:没有。 (除非您提交更改,否则 git 对您的更改一无所知。)
    • 那么你所要做的就是添加一条评论,说明没有 git 命令。你的“答案”不是答案。
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2011-03-11
      • 2012-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-09
      • 1970-01-01
      • 1970-01-01
      • 2021-11-19
      相关资源
      最近更新 更多