【发布时间】:2011-04-11 17:06:08
【问题描述】:
有没有办法列出更改特定文件的所有提交?
【问题讨论】:
-
您是否在单个分支中寻找对文件的更改;跨所有当地分支机构;跨单个遥控器上的所有分支;或跨越这一切?我认为这一切都需要一个脚本。
有没有办法列出更改特定文件的所有提交?
【问题讨论】:
--follow 适用于特定文件
git log --follow -- filename
与给出的其他解决方案的区别
请注意,其他解决方案包括git log path(没有--follow)。如果您想跟踪例如,这种方法很方便。 目录中的更改,但重命名文件时会出错(因此使用--follow filename)。
【讨论】:
--follow 考虑重命名,所以这比 git log -- path 更健壮
--follow 接受 path,它可以是文件也可以是目录。在后者的情况下,它将递归运行并报告该点以下所有文件的更改。 (此行为未记录在手册页中,可能不是永久性的。)
git log filename?有什么区别
git log filename 不跟随文件重命名,即它将显示有关该 filename 的所有提交(不是实际文件)。如果您创建文件X 和Y,更改两者,然后删除Y 并将X 重命名为Y,然后也更改它,然后运行git log Y,您将收到两个旧Y和新一个。反之,使用--follow,当它被命名为X和时,当它被命名为Y时,你将获得关于该文件的提交。
git log path 应该做你想做的事。来自git log man page:
[--] <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.
【讨论】:
我一直在仔细研究,所有这些答案似乎并没有真正向我展示所有分支的所有提交。
这是我通过使用 gitk 编辑视图选项得出的结论。这向我显示了文件的所有提交,无论分支、本地、reflog 和远程如何。
gitk --all --first-parent --remotes --reflog --author-date-order -- filename
它也适用于git log:
git log --all --first-parent --remotes --reflog --author-date-order -- filename
【讨论】:
--reflog 包括已重新定位/修改或以其他方式丢弃的提交。也许这应该很明显,但我尝试将其与 git log 一起使用,并试图弄清楚为什么我看到看似重复的提交!
使用以下命令获取特定文件的提交:
git log -p filename
【讨论】:
git log -p mybranch -- filename 这样添加分支,或者只使用git log --all -- filename 来查看所有分支。
应该像git log <somepath>一样简单;检查手册页 (git-log(1))。
我个人喜欢使用git log --stat <path>,这样我可以看到每次提交对文件的影响。
【讨论】:
-p,如果您想查看完整的差异,不仅仅是修改了一些行数。
git show 对看起来很重要的特定提交。
或者(从 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.com/list-some-useful-git-commands
作为jackrabb1t pointed out,--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 仅适用于单个文件。
【讨论】:
--follow 适用于单个 path,它可以是一个目录。如果传递一个目录,它将递归运行并报告该点以下所有文件的更改。
如果您想查找filename 和而不是 filepath 的所有提交,请使用:
git log --all -- '*.wmv'
【讨论】:
如果您尝试--follow 一个在之前提交中删除的文件,请使用
git log --follow -- filename
【讨论】:
git 新手:也使用git log -p --follow -- filename 来显示更改。另请注意:“文件名”可以是文件、目录或子模块。
如果您希望查看更改特定文件的提交中所做的所有更改(而不仅仅是对文件本身的更改),您可以传递--full-diff:
git log -p --full-diff [branch] -- <path>
【讨论】:
[branch]
如果要查看更改文件的所有提交,请在所有分支中使用:
git log --follow --all <filepath>
【讨论】:
使用git log --all <filename> 查看所有分支中影响<filename> 的提交。
【讨论】:
gitk <path_to_filename>
假设包“gitk”已经安装。
如果未安装,请执行以下操作:
sudo apt-get install gitk
然后试试上面的命令。它适用于 Linux...如果 Linux 用户需要 GUI,它可能会有所帮助。
【讨论】:
gitk 与 Git for Windows 捆绑在一起。
要获取提交哈希列表,请使用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>
【讨论】:
在 Linux 上,您可以为此使用 gitk。
可以使用“sudo apt-get install git-gui gitk”安装。它可用于通过“gitk
【讨论】: