2011-08-25 51 views
3

我经常需要找到一些我在老版本的脚本中编码的东西,但我不知道何时。我通常会尝试在日志中寻找不同的版本,看看他们是否有变化,或者我只是放弃并尝试其他的东西。有没有办法使用git来查看文件的所有版本?

将是特别有用什么是输出两个日期或散列之间的文件的每一个版本的命令。然后,一个简单的grep会发现我在找什么。

它可能会工作是这样的:

git showeverything d612905a..b39af32e /path/to/file /tmp/output 

回答

4

Git有这种情况的完美工具:git log -S这将搜索的改变,并只显示那些提交

# search changes in all branches which touch the string $abc in a file 
git log -p -S'$abc' --all -- path/to/file 
+0

越来越近了,但我们仍然在处理changelog输出。这很有用,但不像获取与更改相关的完整原始文件一样有用。主要的用例是这样的:我写了一个函数,决定不使用它,忘了我什么时候写它。几个月后,我想起了这个名字,并希望为这个功能记录历史,并轻松地剪切并粘贴它,而不用改变日志的顺序和缺点。 – Matt

+0

@Matt:首先使用'git log -S'查找提交,然后使用'git show '。我想有没有简单,直接和快速的方法来做到这一步 – knittl

0

我知道这可能不是你要找的答案,但托管网站/服务的每一个Git有一个漂亮的GUI做去翻提交历史在存储库中的每个文件。我用了很多。

0

您可以使用git log [commit_range/dates/other_constraints] -- <filename(s)>显示属于特定文件中的所有更改日志,你可以添加约束上的日期/款/等。以及。

使用git show <same stuff>实际显示在每个阶段的文件...

+0

这已经很接近,但我的是看到了一套完整的文件,而不是他们之间只是更改日志真正感兴趣的东西。 – Matt

+0

@knittl的anwser可能是你正在寻找的,然后 – johnny

0

git log file节目影响文件的所有提交的提交ID。

git show commitid:file打印的文件到标准输出的相关版本的内容。

请注意,在git show命令中,如果您只是指定文件名相对于您的git存储库的根目录,除非您指定了一个路径,而不是指定到当前目录。要显示当前目录下的文件:

git show commitid:./file*

+0

我认为答案可能会是一个shell脚本,它需要git日志输出并通过git show提供它。 – Matt

相关问题