是否有一种方法可以列出更改特定文件的所有提交?


当前回答

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

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 rev-list:

 git rev-list HEAD <filename>

输出:

b7c4f0d7ebc3e4c61155c76b5ebc940e697600b1
e3920ac6c08a4502d1c27cea157750bd978b6443
ea62422870ea51ef21d1629420c6441927b0d3ea
4b1eb462b74c309053909ab83451e42a7239c0db
4df2b0b581e55f3d41381f035c0c2c9bd31ee98d

这意味着有五次提交涉及到该文件。它是按倒序排列的,所以列表中的第一个提交b7c4f0d7是最近的一个。

# 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>

参考

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

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

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