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 diff --stat还是git diff filename来帮助你?
搜索时可以使用Git日志显示差异:
1
| git log -p -- path/to/file |
- 我喜欢这个-好多了。唯一更好的是一个GUI以更友好的方式呈现差异…
- 过一段时间后,您会喜欢控制台差异,只需启用颜色即可。
- 我同意。git--config--global color.ui真
- 您还可以将diff导入文本编辑器,如sublime,以获得更好的颜色、搜索功能和总体上更好的工作体验:git log -p -- path/to/file | subl。
- 为了使输出更具可读性,您可以通过键入-S来换行,然后返回。如果您的Git使用默认的Linux寻呼机"更少",则可以工作。(来源)
- 启用颜色绝对有用。但是,该命令似乎是git config --global color.ui true(配置前不带双破折号)。至少这是我使用Git版本1.9.1的原因。
您是否尝试过:
号
- 似乎显示了最后一次接触到path/to/file的提交
- 它应该为path/to/file显示gitk接口,包括commits和diff,而不仅仅是最后一次commit。
- 实际上,看起来这正是我需要的——整个时间线都围绕路径/目标/文件。
- 这对我不起作用-我只是得到一个空白屏幕,上面显示"未选择提交"。
- 在最新的MacOS上,gitk的DPI比例不高。除此之外,真是太棒了
git log -p将为所选的每个提交生成一个补丁(diff)。对于单个文件,使用git log --follow -p $file。
如果您要查找特定的更改,请使用git bisect通过将提交数分成两部分来查找日志(n)视图中的更改,直到找到要更改的内容。
还可以考虑回顾历史,使用git blame跟踪所讨论行的更改(如果您知道这是什么)。此命令显示影响特定行的最新修订。如果有人随着时间的推移对某些内容进行了调整,您可能需要返回一些版本来查找引入内容的第一个更改,但这可能会给您一个好的开始。
最后,作为一个GUI,gitk会立即为我单击的任何提交显示补丁。
示例:
- 好消息,谢谢。然而,对于GUI——这是我描述的问题——是的,它显示了提交/文件的差异。但不是针对文件中的所有差异。看起来我被命令行卡住了!
- @Chris在左上角的窗口中单击一个不同的版本,您将在左下角的窗口中看到相应的差异。如果你在谈论别的事情,你能详细说明吗?
- 与gitk path/to/file结合使用,就可以做到这一点!
- @chris进入View -> Edit view...菜单,你会发现一个非常强大的过滤标准,除了在命令行上列出路径之外,还可以灵活地缩小搜索范围(你也可以在这里,不需要重新启动实例)。
对我来说,主要的问题是,你到底想找出什么?您是否试图找出在该文件中引入某组更改的时间?
您可以使用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经常为我提供一种实际查找所需信息的方法。
如果您尝试少考虑如何执行某个工作流,而更多地考虑您需要的信息,那么您可能会有许多工作流(在我看来)更加简单和快速。
- 我认为你是对的,作为一个高性能用户,我只是习惯于通过点击历史来了解文件中的变化。我知道像git-blank这样的工具可以更快地看到谁最后一次接触到一条特定的线(这是一个很难用性能找到的东西)。但仅仅是随便浏览一下文件的历史记录,git就有点乏味了。
- @克里斯:是的,这和Git背后的设计有很大关系。在基本层面上,Git没有"文件历史"这样的概念。这通常用"git不管理文件,它管理内容"来表示。对于Git,您的整个工作树就是内容,历史就是这个完整目录的历史。这与将历史附加到单个文件的其他SCM截然不同。
- 我明白,但嘿,老哈比人死得很辛苦。)