有没有一种方法可以使用git查看文件的所有版本?

ioekq8ef  于 2023-04-28  发布在  Git
关注(0)|答案(5)|浏览(185)

我经常需要找到一些我在旧版本的脚本中编码的东西,但我不知道什么时候。我通常尝试在日志中跳来跳去寻找不同的版本,看看它们是否有变化,或者我只是给予并尝试其他东西。
特别有用的是输出两个日期或散列之间的文件的每个版本的命令。然后一个简单的grep就能找到我要找的东西。
它可能会像这样工作:

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

z4iuyo4d1#

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
ohfgkhjo

ohfgkhjo2#

我知道这可能不是你想要的答案,但是每个git托管网站/服务都有一个很好的GUI,可以查看仓库中每个文件的提交历史。我经常用。

egdjgwm8

egdjgwm83#

你可以使用git log [commit_range/dates/other_constraints] -- <filename(s)>来显示与特定文件相关的所有更新日志,你可以在日期/提交/等等中添加约束。也是
使用git show <same stuff>实际显示每个阶段的文件。..

gmol1639

gmol16394#

git log file显示所有影响 file 的提交的提交id。
git show commitid:file将文件的相关版本的内容打印到stdout。
请注意,在git show命令中,如果只指定文件名,则文件名是相对于git仓库的根目录的,除非指定路径,而不是相对于当前目录的。要显示当前目录中的文件,请执行以下操作:
git show commitid:./file*

4c8rllxm

4c8rllxm5#

根据其他答案,我得到了这个:

for hash in $(git log --pretty=format:%h style/elevation.mss); do 
    echo -e "==========\n$hash\n"
    git show ${hash}:style/elevation.mss
done | less

它需要一些参数化,但你得到的想法。

相关问题