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