关于git:显示文件的历史记录?

Show history of a file?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
View the change history of a file using Git versioning

有时我想单步浏览特定文件的历史记录。在过去,我使用p4v,这是非常迅速和直观的。

  • 右键单击文件并选择历史记录。
  • 滚动浏览日期,查看该日期文件中更改内容的细微差别。简单。
  • 切换到Git现在是一项艰巨的任务。

  • "Git日志文件名"
  • 查看历史记录并选择日期,复制哈希
  • "Git diff哈希"
  • 在diff中滚动查找我感兴趣的文件中更改的内容。
  • 不,不是这样的,让我们试试另一个日期-回到步骤2,漂洗然后重复。
  • 我已经搜索过了,我尝试过一些常用的gui:github、gitk、gitg、gitgui。

    所有这些都消除了手动运行命令的需要,但工作流对此是相同的。查看文件历史;查看提交;搜索大量无关文件的差异。它是缓慢的和重复的。

    所有的数据都在回购中,所以我认为没有理由不能更简化这个简单的通用用例。

    有人能推荐一个这样做的工具吗?或者更有效地利用命令行来做我想做的事情?

    谢谢你的建议。


    搜索时可以使用Git日志显示差异:

    1
    git log -p -- path/to/file


    您是否尝试过:

    1
    gitk path/to/file


    git log -p将为所选的每个提交生成一个补丁(diff)。对于单个文件,使用git log --follow -p $file

    如果您要查找特定的更改,请使用git bisect通过将提交数分成两部分来查找日志(n)视图中的更改,直到找到要更改的内容。

    还可以考虑回顾历史,使用git blame跟踪所讨论行的更改(如果您知道这是什么)。此命令显示影响特定行的最新修订。如果有人随着时间的推移对某些内容进行了调整,您可能需要返回一些版本来查找引入内容的第一个更改,但这可能会给您一个好的开始。

    最后,作为一个GUI,gitk会立即为我单击的任何提交显示补丁。

    示例enter image description here


    对我来说,主要的问题是,你到底想找出什么?您是否试图找出在该文件中引入某组更改的时间?

    您可以使用git blame来完成此操作,它将用sha1和更改日期来为每一行命名。如果您感兴趣,git blame还可以告诉您某一行何时被删除,或移动到何处。

    如果你想知道,当引入某个bug时,git bisect是一个非常强大的工具。git bisect将对您的历史进行二进制搜索。您可以使用git bisect start开始平分,然后使用git bisect bad标记存在bug的提交,使用git bisect good标记没有bug的提交。Git会在两者之间签出一个commit,并询问它是好是坏。您通常可以在几个步骤内找到错误提交。

    由于我使用了Git,所以我几乎没有发现需要手动查看补丁历史来查找某些内容,因为Git经常为我提供一种实际查找所需信息的方法。

    如果您尝试少考虑如何执行某个工作流,而更多地考虑您需要的信息,那么您可能会有许多工作流(在我看来)更加简单和快速。