显示文件的历史记录?

时间:2012-03-21 15:11:52

标签: git github version-control git-history

  

可能重复:
  View the change history of a file using Git versioning

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

  1. 右键单击文件并选择历史记录。
  2. 滚动浏览日期,看看 日期那个文件中确切改变的差异。简单。
  3. 切换到git现在这是一项艰苦的任务。

    1. “git log filename”
    2. 查看历史记录并选择日期,复制哈希
    3. “git diff hash”
    4. 滚动浏览差异,查看我感兴趣的文件中更改的内容。
    5. 不,那不是它,让我们尝试不同的日期 - 回到第2步,冲洗并重复。
    6. 我搜索了SO,我尝试了一些常用的guis:github,gitk,gitg,git-gui。

      这些都消除了手动运行命令的需要,但工作流程与此相同。查看文件历史记录;查看提交;搜索大量不相关文件的差异。这是缓慢而重复的。

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

      任何人都可以推荐一个可以执行此操作的工具 - 或者使用命令行更有效地执行我想要的操作吗?

      感谢您的任何建议。

4 个答案:

答案 0 :(得分:139)

您可以使用git log在搜索时显示差异:

git log -p -- path/to/file

答案 1 :(得分:128)

你试过这个:

gitk path/to/file

答案 2 :(得分:46)

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

如果您正在寻找特定的更改,请在log(n)视图中使用git bisectfind the change,方法是将提交次数分成两半,直到找到您要查找的内容发生更改为止

如果您知道这是什么,还可以考虑使用git blamefollow changes to the line回顾历史记录。此命令显示影响某一行的最新修订。你可能不得不回过头几个版本来找到引入某些东西的第一个变化,如果有人随着时间的推移调整它,但这可以给你一个良好的开端。

最后,gitk作为我点击的任何提交的GUI does show me the patch immediately

示例enter image description here

答案 3 :(得分:10)

对我来说,主要的问题是,你究竟想要找出什么?您是否试图找出该文件中引入了哪些更改?

您可以使用git blame,它将使用SHA1和更改日期来分配每一行。 git blame也可以告诉您某个行何时被删除或者如果您对此感兴趣,可以将其移动。

如果您想了解一下,当引入某个错误时,git bisect是一个非常强大的工具。 git bisect会对您的历史记录进行二元搜索。您可以使用git bisect start开始二分,然后git bisect bad标记存在错误的提交,并git bisect good标记没有错误的提交。 git会检查两者之间的提交,并询问它是好还是坏。您通常可以在几个步骤中找到错误的提交。

由于我使用了git,我几乎没有发现需要手动浏览补丁历史来查找内容,因为大多数情况下git为我提供了一种实际查找所需信息的方法。

如果你试图少考虑如何做某个工作流程,但更多地考虑你需要什么信息,你可能会有很多工作流程(在我看来)更简单,更快。