我还是 Git 的新手,所以我不知道该怎么做,尽管我已经看到它用一些软件完成了。如何获得在给定分支上进行的提交列表?
我想知道的更具体的原因是,我可以找到通过指定分支添加到存储库的所有文件作为输入。谢谢。
我还是 Git 的新手,所以我不知道该怎么做,尽管我已经看到它用一些软件完成了。如何获得在给定分支上进行的提交列表?
我想知道的更具体的原因是,我可以找到通过指定分支添加到存储库的所有文件作为输入。谢谢。
给定分支上的提交列表的简单方法,不包括合并到其中:
git log --first-parent <branch>
上述命令将包括在创建分支时导致提交的所有提交。
因为,您必须记住,git 并不真正跟踪分支的开始位置。一个分支只是一个移动的标签,指向一个提交,它的日志通常会显示所有对这个提交的历史做出贡献的提交的列表。包括所有合并。
在创建分支的原始存储库中,您可以从 reflog 中提取 branch-start 的历史记录:
git reflog show <branch>
但是在服务器上祝你好运,在多次提交后首先推送分支。
实际上,我想知道,是否有人有可靠的解决方案来找到分支的起点?图论专家需要。
签出,您可以使用 git log --help
该选项。--branches=<pattern>
所以你可以做git log --branches=<branch-name> --name-only
这将列出所有提交以及每个提交中更改的文件。
您可以使用它git merge-base <branch1> <branch2>
来查找分支偏离的 SHA。
然后使用git log --branches=<branch-name> --name-only <SHA>..HEAD
您只能在分支上查看所有更改。
您无需签出分支即可查看其日志。事实上,你根本不需要一个分支,你所需要的只是一个 ref。无论哪种方式,假设您的分支(或提交哈希/引用)被称为mybranch
. 只需运行此命令即可获取曾经属于 git 历史记录的所有文件的列表:
git log --name-only --format="% " mybranch | grep -v '^$' | sort | uniq
Where--name-only
将向您显示文件名,--format="% "
将删除所有提交消息和哈希,mybranch
标记从起点向后退(直到第一次提交)。然后,您使用 删除所有空行grep
,并且您必须sort
使用名称才能删除重复项uniq
。生成的列表将包括在存储库中被删除或移动的文件。
如果您只需要查看当前文件(不包括已删除的文件),请使用以下命令:
git ls-tree -r --full-tree --name-only mybranch
要查看提交列表(没有文件 - 您的第一个问题),只需运行
git log REF
或者,如果您想要单行格式,请使用该--format=oneline
标志。另外,试试--stat
国旗。它不像上面的例子那么容易理解,但有一天可能会证明它对你有用。