2

我还是 Git 的新手,所以我不知道该怎么做,尽管我已经看到它用一些软件完成了。如何获得在给定分支上进行的提交列表?

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

4

3 回答 3

1

给定分支上的提交列表的简单方法,不包括合并到其中:

git log --first-parent <branch>

上述命令将包括在创建分支时导致提交的所有提交。

因为,您必须记住,git 并不真正跟踪分支的开始位置。一个分支只是一个移动的标签,指向一个提交,它的日志通常会显示所有对这个提交的历史做出贡献的提交的列表。包括所有合并。

在创建分支的原始存储库中,您可以从 reflog 中提取 branch-start 的历史记录:

git reflog show <branch>

但是在服务器上祝你好运,在多次提交后首先推送分支。

实际上,我想知道,是否有人有可靠的解决方案来找到分支的起点?图论专家需要。

于 2013-10-07T20:20:20.980 回答
1

签出,您可以使用 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您只能在分支上查看所有更改。

于 2013-10-07T20:21:44.027 回答
1

您无需签出分支即可查看其日志。事实上,你根本不需要一个分支,你所需要的只是一个 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国旗。它不像上面的例子那么容易理解,但有一天可能会证明它对你有用。

于 2013-10-07T21:06:15.057 回答