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

时间:2010-09-13 14:37:01

标签: git commit

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

17 个答案:

答案 0 :(得分:931)

--follow适用于特定文件

git log --follow -- filename

与其他解决方案的区别

请注意,其他解决方案包括git log path(不包含--follow)。如果你想跟踪例如,这种方法很方便目录中的更改,但在重命名文件时会发生错误(因此请使用 --follow filename )。

答案 1 :(得分:120)

git log path应该做你想做的事。来自git log man

[--] <path>…

Show only commits that affect any of the specified paths. To prevent confusion with 
options and branch names, paths may need to be prefixed with "-- " to separate them
from options or refnames.

答案 2 :(得分:40)

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

git log -p filename

答案 3 :(得分:40)

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

这是我通过搞乱gitk编辑视图选项而想到的。这显示了文件的所有提交,无论分支,本地,reflog和远程。

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

答案 4 :(得分:35)

它应该像git log <somepath>一样简单;检查联机帮助页(git-log(1))。

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

答案 5 :(得分:14)

正如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仅适用于单个文件。

答案 6 :(得分:11)

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

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

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

其中upperLimitstart_line_numberlowerLimitending_line_number

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

答案 7 :(得分:10)

如果您在先前的提交中尝试 - 关注文件已删除

git log --follow -- filename

答案 8 :(得分:8)

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

git log --follow --all <filepath>

答案 9 :(得分:6)

如果您希望按filename而不是 filepath查找所有提交,请使用:

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

答案 10 :(得分:5)

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

答案 11 :(得分:4)

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

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

答案 12 :(得分:3)

gitk <path_to_filename>

假设已经安装了包“gitk”。

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

sudo apt-get install gitk

然后尝试上面的命令。它适用于Linux ......如果Linux用户需要GUI,它可能会有所帮助。

答案 13 :(得分:2)

要仅获取提交哈希值列表,请使用git rev-list

 git rev-list HEAD <filename>

输出:

b7c4f0d7ebc3e4c61155c76b5ebc940e697600b1
e3920ac6c08a4502d1c27cea157750bd978b6443
ea62422870ea51ef21d1629420c6441927b0d3ea
4b1eb462b74c309053909ab83451e42a7239c0db
4df2b0b581e55f3d41381f035c0c2c9bd31ee98d

,意味着5次提交已触及此文件。这是按时间倒序排列的,因此列表b7c4f0d7中的第一次提交是最近的一次。

答案 14 :(得分:1)

# Shows commit history with patch
git 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>

Reference

答案 15 :(得分:1)

在Linux上,您可以使用gitk。

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

答案 16 :(得分:0)

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

<块引用>

git rev-list HEAD --oneline FileName

例如

<块引用>

git rev-list HEAD --oneline index.html

输出

7a2bb2f update_index_with_alias
6c03e56 update_changes
e867142 Revert "add_paragraph"

查看 gif 图片git commits for specific files