Git:按分支过滤提交历史

Git:按分支过滤提交历史,git,version-control,Git,Version Control,我对Git还是新手,所以我不知道该怎么做,尽管我见过一些软件可以做到这一点。如何获取在给定分支上进行的提交列表 我想知道这一点的更具体原因是,我可以找到通过指定分支作为输入添加到repo的所有文件。谢谢。对于给定分支上的提交列表来说,这是一种过于简单的方法,不包括合并到其中: git log --first-parent <branch> git日志--第一个父级 上述命令将包括在创建分支时导致提交的所有提交 因为,您必须记住,git并不真正跟踪分支的起始位置。分支只是一个移动的

我对Git还是新手,所以我不知道该怎么做,尽管我见过一些软件可以做到这一点。如何获取在给定分支上进行的提交列表


我想知道这一点的更具体原因是,我可以找到通过指定分支作为输入添加到repo的所有文件。谢谢。

对于给定分支上的提交列表来说,这是一种过于简单的方法,不包括合并到其中:

git log --first-parent <branch>
git日志--第一个父级
上述命令将包括在创建分支时导致提交的所有提交

因为,您必须记住,git并不真正跟踪分支的起始位置。分支只是一个移动的标签,指向一个提交,它的日志通常显示一个列表,其中列出了所有参与此提交历史的提交。包括所有合并

在创建分支机构的原始回购中,您可以从reflog中提取分支机构开始的历史记录:

git reflog show <branch>
git reflog show
但是在服务器上祝你好运,在多次提交之后分支首先被推送


实际上,我想知道,有没有人能找到一个可靠的方法来找到分支的起点?需要图论专家。

查看
git log--help
,您可以使用
--branchs=
选项

因此,您可以执行
git log--branchs=--name only

这将列出所有提交以及每个提交中更改的文件

您可以使用
git merge base
查找分支发散的SHA


然后使用
git log--branchs=--name only..HEAD
您可以只查看分支上的所有更改。

您不需要签出分支即可查看其日志。事实上,您根本不需要分支,只需要一个ref。不管怎样,假设您的分支(或commit hash/ref)被称为
mybranch
。只需运行此命令即可获得所有文件的列表,这些文件曾经是git历史记录的一部分:

git log --name-only --format="% " mybranch | grep -v '^$' | sort | uniq
其中,
--name only
将显示文件名,
--format=“%”
将删除所有提交消息和散列,
mybranch
标记要从中后退的起点(直到第一次提交)。然后使用
grep
删除所有空行,并且必须对名称进行
排序,以便使用
uniq
删除重复的名称。生成的列表将包括在存储库中删除或移动的文件

如果只需要查看当前文件(不包括已删除的文件),请使用以下命令:

git ls-tree -r --full-tree --name-only mybranch
要查看提交列表(没有文件-您的第一个问题),只需运行

git log REF
或者,如果需要单行格式,请使用
--format=oneline
标志。
另外,请尝试使用
--stat
标志。它不像上面的例子那么容易实现,但有一天可能会证明它对您有用。

如果其他分支反向合并到功能分支中,这不会失败吗?这个日志将显示通过这些合并的分支添加的文件,我不希望这样。