是否有一种方法可以列出更改特定文件的所有提交?
Git日志路径应该做你想做的。从git日志手册页:
[--] <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.
它应该像git log <somepath>;查看manpage (git-log(1))。
我个人喜欢使用git log——stat <path>,这样我就可以看到每次提交对文件的影响。
——follow适用于特定的文件
git log --follow -- filename
与给出的其他解的区别
注意,其他解决方案包括git日志路径(没有——follow)。如果你想跟踪目录中的变化,但是当文件被重命名时(因此使用——follow 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 <Filename>”来查看特定文件的提交。
gitk <path_to_filename>
假设已经安装了包“gitk”。
如果没有安装,请执行以下操作:
sudo apt-get install gitk
然后尝试上面的命令。它是Linux的…如果Linux用户需要GUI,它可能会对他们有所帮助。
或者(从Git 1.8.4开始),也可以只获取更改了文件特定部分的所有提交。你可以通过传递起始行和结束行号来得到它。
返回的结果将是修改该特定部分的提交列表。命令如下:
git log --pretty=short -u -L <upperLimit>,<lowerLimit>:<path_to_filename>
其中upperLimit是start_line_number, lowerLimit是ending_line_number
更多信息- https://www.techpurohit.in/list-some-useful-git-commands
我一直在仔细研究这个问题,所有这些答案似乎并没有真正向我展示所有分支的所有提交。
以下是我通过摆弄gitk编辑视图选项得到的结果。这显示了一个文件的所有提交,而不考虑分支、本地、reflog和远程。
gitk --all --first-parent --remotes --reflog --author-date-order -- filename
它也适用于git日志:
git log --all --first-parent --remotes --reflog --author-date-order -- 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>
参考
如果你希望看到提交中对特定文件的所有更改(而不仅仅是对文件本身的更改),你可以传递——full-diff:
git log -p --full-diff [branch] -- <path>
要获得一个提交哈希列表,使用git rev-list:
git rev-list HEAD <filename>
输出:
b7c4f0d7ebc3e4c61155c76b5ebc940e697600b1
e3920ac6c08a4502d1c27cea157750bd978b6443
ea62422870ea51ef21d1629420c6441927b0d3ea
4b1eb462b74c309053909ab83451e42a7239c0db
4df2b0b581e55f3d41381f035c0c2c9bd31ee98d
这意味着有五次提交涉及到该文件。它是按倒序排列的,所以列表中的第一个提交b7c4f0d7是最近的一个。
获取特定文件的所有提交:
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图片
推荐文章
- 如何查看一个分支中的哪些提交不在另一个分支中?
- 如何取消在github上的拉请求?
- HEAD和master的区别
- GIT克隆在windows中跨本地文件系统回购
- RPC失败;卷度传输已关闭,剩余未完成的读取数据
- 我应该在.gitignore文件中添加Django迁移文件吗?
- 错误:您对以下文件的本地更改将被签出覆盖
- Git rebase—即使所有合并冲突都已解决,仍然会继续报错
- 在Git中,我如何知道我的当前版本是什么?
- 跟踪所有远程git分支作为本地分支
- 自定义SSH端口上的Git
- git如何显示不存在于.gitignore中的未跟踪文件
- Git错误:遇到7个文件应该是指针,但不是
- GitHub克隆与OAuth访问令牌
- 移动(或“撤销”)最后一个git提交到非暂存区域