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

Git 如何列出更改特定文件的所有提交?,git,commit,Git,Commit,有没有办法列出更改特定文件的所有提交?git log path应该按您的要求执行。从: [--]… 仅显示影响任何指定路径的提交。防止与……混淆 选项和分支名称、路径可能需要以“-”作为前缀来分隔它们 从选项或参照名称。 它应该像git log一样简单;检查手册页(git日志(1)) 就我个人而言,我喜欢使用git log--stat,这样我就可以看到每次提交对文件的影响。遵循--follow适用于特定的文件 git log --follow -- filename 与给出的其他解决方案的差异

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

git log path
应该按您的要求执行。从:

[--]…
仅显示影响任何指定路径的提交。防止与……混淆
选项和分支名称、路径可能需要以“-”作为前缀来分隔它们
从选项或参照名称。

它应该像
git log
一样简单;检查手册页(
git日志(1)

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

遵循--follow适用于特定的文件

git log --follow -- filename
与给出的其他解决方案的差异


请注意,其他解决方案包括
git日志路径
(没有
——follow
)。如果您想跟踪例如目录中的更改,但当文件重命名时会出错(因此请使用
--遵循文件名
),这种方法非常方便。

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

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

如果您希望可视化名称/路径更改,则这是一个更好的选项:

git log --follow --name-status -- <path>
git日志--跟随--名称状态--
但如果您想要一个更紧凑的列表,其中只列出重要的内容:

git log --follow --name-status --format='%H' -- <path>
git日志--follow--name状态--format='%H'-
甚至

git log --follow --name-only --format='%H' -- <path>
git日志--follow--仅限名称--格式='%H'-
缺点是
--follow
只适用于单个文件。

在Linux上,您可以使用它

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

然后尝试上面的命令。它是针对Linux的。。。如果Linux用户需要GUI,它可能会对他们有所帮助。

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

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

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

其中
上限
起始行数
下限
结束行数


更多信息-

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

如果您试图--跟踪上一次提交中删除的文件,请使用

git log --follow -- filename

我一直在仔细研究这个问题,所有这些答案似乎并没有真正向我展示所有分支的所有提交

下面是我在“编辑视图”选项上乱搞的结果。这将显示文件的所有提交,而不考虑分支、本地、reflog和远程

gitk --all --first-parent --remotes --reflog --author-date-order -- filename
它还可以与git日志一起使用:

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

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

git log --follow --all <filepath>
git日志--跟随--全部
#显示带有修补程序的提交历史记录
git日志-p----跟随
#显示简短的详细信息,如“1个文件已更改,6个插入(+),1个删除(-)
git日志——stat——follow

如果要按
文件名查找所有提交,而不是按
文件路径查找所有提交,请使用:

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

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

git log -p --full-diff [branch] -- <path>
git log-p--完全差异[分支]--

要获取提交哈希的列表,请使用:


这意味着有五次提交涉及此文件。它是按逆时间顺序排列的,因此列表中的第一次提交是最近的一次提交。

要获取特定文件使用的所有提交,请执行以下操作:

git rev列表头--单行文件名

比如说

git rev列表头--oneline index.html

输出

7a2bb2f update_index_with_alias
6c03e56 update_changes
e867142 Revert "add_paragraph"

如果您想查看完整的差异,请查看gif图像

,甚至是
-p
,这不仅仅是因为它修改了一些行数。这是真的,但考虑到大多数文件在其使用寿命中已多次更改,这非常嘈杂。我不想看到每个涉及文件的提交的完整差异。我通常在寻找一个特定的东西,这样我就可以得到一个只包含影响的日志,然后
git show
对那些看起来很重要的特定提交进行处理。git log--stat--follow--*.html=>输出提交列表,每个提交中只有一个文件。非常好+1
--follow
用于重命名,因此这比
git log--path
更健壮。请注意
--follow
接受路径,路径可以是文件,也可以是目录。对于后者,它将递归运行,并报告该点以下所有文件的更改。(此行为未记录在手册页中,可能不是永久性的。)该行为与仅
git日志文件名有什么区别?
@saulertega,
git日志文件名
不遵循文件重命名,即它将显示关于该文件名的所有提交(不是实际文件)。如果您创建文件
X
Y
,将两者都更改,然后删除
Y
,并将
X
重命名为
Y
,然后也将其更改,并且运行
git log Y
,您将获得旧
Y
和新
的消息。相反,使用
--follow
时,当文件名为
X
Y
时,您将获得有关该文件的提交。使用“git log--all filename”查看所有分支中的所有提交。如果文件路径已更改,则该文件不起作用。杰克
# 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 --all -- '*.wmv'
git log -p --full-diff [branch] -- <path>
 git rev-list HEAD <filename>
b7c4f0d7ebc3e4c61155c76b5ebc940e697600b1
e3920ac6c08a4502d1c27cea157750bd978b6443
ea62422870ea51ef21d1629420c6441927b0d3ea
4b1eb462b74c309053909ab83451e42a7239c0db
4df2b0b581e55f3d41381f035c0c2c9bd31ee98d
7a2bb2f update_index_with_alias
6c03e56 update_changes
e867142 Revert "add_paragraph"