显示文件的历史记录?

可能的复制品:
使用 Git version 查看文件的更改历史记录

有时候我想逐步查看一个特定文件的历史记录。在过去我使用 P4V,这是非常快速和直观的。

  1. 右键单击文件并选择历史记录。
  2. 滚动日期,看到一个很好的差异,究竟是什么改变了 那个文件在 那个的日期。简单。

切换到 Git 现在是一项艰巨的任务。

  1. “ git 日志文件名”
  2. 查看历史记录,选择日期,复制散列表
  3. “ git diff hash”
  4. 滚动 diff 查看我感兴趣的文件中更改的内容。
  5. 不,不是这样的,让我们尝试一个不同的日期-回到第2步,冲洗和重复。

我搜索了 SO,并且尝试了一些常用的 guis: github,gitk,gitg,git-gui。

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

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

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

谢谢你的建议。

189458 次浏览

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

git log -p -- path/to/file

git log -p将为每个选中的提交生成一个补丁(diff)。

如果您正在寻找特定的更改,那么在 log (n)视图中使用 git bisect找到改变,将提交数量分成两半,直到您找到所寻找的更改位置。

如果你知道 git blame跟踪线路的变化是什么,也可以考虑使用 git blame回顾历史。此命令显示影响某一行的最新修订。如果有人随着时间的推移对某些内容进行了调整,那么您可能需要返回几个版本才能找到引入内容的第一个更改,但这可能会给您带来一个良好的开端。

最后,对于我点击的任何提交,gitk作为 GUI 马上给我看补丁

示例 < img src = “ https://i.stack.imgur.com/sJoBv.png”alt = “ enter image description here”> :

你试过这个吗:

gitk path/to/file

我的主要问题是,你到底想知道什么?您是否试图查明在该文件中引入某些更改集的时间?

您可以使用 git blame来实现这一点,它将在每一行上标注 SHA1和更改日期。git blame还可以告诉您某行何时被删除,或者如果您对此感兴趣,它被移动到了哪里。

如果你想找出,当一个特定的错误被介绍,git bisect是一个非常强大的工具。git bisect将对您的历史记录进行二进制搜索。您可以使用 git bisect start开始对分,然后使用 git bisect bad标记存在 bug 的提交,使用 git bisect good标记不存在 bug 的提交。Git 将检查两者之间的提交,并询问它是好是坏。您通常可以在几个步骤内发现错误提交。

由于我使用过 git,我几乎从来没有发现需要手动查看补丁历史来找到一些东西,因为大多数情况下,git 为我提供了一种实际查找我需要的信息的方法。

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