168

可能重复:
使用 Git 版本控制查看文件的更改历史记录

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

  1. 右键单击文件并选择历史记录。
  2. 滚动查看日期,并查看该日期在该文件中的确切更改内容的一个很好差异。简单的。

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

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

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

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

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

任何人都可以推荐一个可以做到这一点的工具 - 或者一种更有效的方式来利用命令行来做我想做的事吗?

感谢您的任何建议。

4

4 回答 4

193

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

git log -p -- path/to/file
于 2012-03-21T15:14:44.513 回答
152

你有没有试过这个:

gitk path/to/file
于 2012-03-21T15:37:21.280 回答
53

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

如果您正在寻找特定的更改,请使用通过将提交数分成两半git bisect查找log(n) 视图中的更改,直到找到您要查找的更改的位置。

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

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

示例在此处输入图像描述

于 2012-03-21T15:28:41.037 回答
12

对我来说,主要问题是,你到底想知道什么?您是否试图找出该文件中何时引入了某些更改?

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

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

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

如果您尝试较少考虑如何执行某个工作流程,而更多地考虑您需要哪些信息,那么您可能会使用许多工作流程(在我看来)更简单、更快。

于 2012-03-21T15:38:33.993 回答