如何列出更改特定文件的所有提交?

有没有办法列出更改特定文件的所有提交?

395356 次浏览

git log path应该做你想做的事。来自#1手册页

[--] <path>…
Show only commits that affect any of the specified paths. To prevent confusion withoptions and branch names, paths may need to be prefixed with "-- " to separate themfrom options or refnames.

它应该像git log <somepath>一样简单;检查手册页(git-log(1))。

就我个人而言,我喜欢使用git log --stat <path>,这样我就可以看到每个提交对文件的影响。

--follow适用于特定文件

git log --follow -- filename

与给出的其他解决方案的区别

请注意,其他解决方案包括git log path(没有--follow)。如果您想跟踪目录中的更改,但文件重命名时出错(因此使用#2),这种方法很方便。

使用下面的命令获取特定文件的提交:

git log -p filename

jackRabb1t指出一样,--follow更健壮,因为它继续列出重命名/移动之外的历史记录。因此,如果您正在寻找当前不在同一路径中的文件或在各种提交中已重命名的文件,--follow将跟踪它。

如果您想可视化名称/路径更改,这可能是一个更好的选择:

git log --follow --name-status -- <path>

但如果你想要一个更紧凑的列表,只列出重要的内容:

git log --follow --name-status --format='%H' -- <path>

甚至

git log --follow --name-only --format='%H' -- <path>

缺点是--follow仅适用于单个文件。

Linux你可以使用gitk

它可以使用“sudo apt-get install git-gui gitk”安装。它可用于通过“gitk”查看特定文件的提交。

gitk <path_to_filename>

假设包“gitk”已经安装。

如果未安装,请执行以下操作:

sudo apt-get install gitk

然后尝试上面的命令。这是Linux…如果用户需要GUI,它可能会帮助Linux用户。

或者(从Git 1.8.4开始),也可以只获取更改文件特定部分的所有提交。您可以通过传递起始行和结束行号来获取此信息。

返回的结果将是修改此特定部分的提交列表。该命令如下所示:

git log --pretty=short -u -L <upperLimit>,<lowerLimit>:<path_to_filename>

其中upperLimitstart_line_numberlowerLimitending_line_number

更多信息-https://www.techpurohit.in/list-some-useful-git-commands

使用git log --all <filename>查看所有分支中影响<filename>的提交。

如果您尝试在前一次提交中--跟踪已删除的文件,请使用

git log --follow -- filename

我一直在密切关注这个问题,所有这些答案似乎并没有真正向我展示所有分支的所有提交。

这是我通过摆弄gitk编辑视图选项得到的结果。这显示了我一个文件的所有提交,无论分支、本地、reflg和远程。

gitk --all --first-parent --remotes --reflog --author-date-order -- filename

它也适用于git log

git log --all --first-parent --remotes --reflog --author-date-order -- filename

如果您想查看更改文件的所有提交,请在所有分支中使用:

git log --follow --all <filepath>
# Shows commit history with patchgit log -p -<no_of_commits> --follow <file_name>
# Shows brief details like "1 file changed, 6 insertions(+), 1 deletion(-)"git log --stat --follow <file_name>

参考

如果您想查找filename不是通过filepath的所有提交,请使用:

git log --all -- '*.wmv'

如果您希望查看更改特定文件的提交中的所有更改(而不仅仅是对文件本身的更改),您可以传递--full-diff

git log -p --full-diff [branch] -- <path>

要获取提交哈希列表,请使用#0

 git rev-list HEAD <filename>

输出:

b7c4f0d7ebc3e4c61155c76b5ebc940e697600b1e3920ac6c08a4502d1c27cea157750bd978b6443ea62422870ea51ef21d1629420c6441927b0d3ea4b1eb462b74c309053909ab83451e42a7239c0db4df2b0b581e55f3d41381f035c0c2c9bd31ee98d

这意味着有五个提交触及了这个文件。它是按时间倒序排列的,所以列表b7c4f0d7中的第一个提交是最近的。

要获取特定文件使用的所有提交:

git rev-list HEAD --oneline FileName

例如

git rev-list HEAD --oneline index.html

产出

7a2bb2f update_index_with_alias6c03e56 update_changese867142 Revert "add_paragraph"

见gif图像git提交特定文件