我有一个简洁命名的特性分支feature
,它有大约 100 次提交,都与某种特性相关。随着时间的推移,这些提交都合并到了主分支中。我想列出分支上的所有提交,以便我可以将该功能重新添加到其他项目。
基本上我想在下图中的绿点上有提交 ID。
除了通过 gitk 或类似工具并手动收集所有相关的提交 ID 之外,我如何在 Git 中做到这一点?
我有一个简洁命名的特性分支feature
,它有大约 100 次提交,都与某种特性相关。随着时间的推移,这些提交都合并到了主分支中。我想列出分支上的所有提交,以便我可以将该功能重新添加到其他项目。
基本上我想在下图中的绿点上有提交 ID。
除了通过 gitk 或类似工具并手动收集所有相关的提交 ID 之外,我如何在 Git 中做到这一点?
如果您获得特定分支的起点,例如,请SHA1
尝试以下操作:
git log --pretty=oneline SHA1^..feature
master
尽管给出并接受了答案,但我建议使用更自动的方法来执行此操作(但只有在您没有合并to时才会起作用feature
):
考虑以下历史:
--A---B---C---D---E---F---G (master)
\ / /
H---J-------K (feature)
基本上我们要执行git log B..feature
.
git log --format='%H' feature..master | tail -1 | \
xargs -I '{}' git log '{}'^..feature
git log --format='%H' feature..master | tail -1
master
将找到在您创建feature
分支后立即完成的提交- 这是C
而C
-的祖先也将是分支B
的第一次提交的祖先H
。feature
然后xargs -I '{}' git log '{}'^..feature
(即转为git log B..feature
)仅显示feature
可从B
.
一个更简单的版本,可以使用 Git 2.36(2022 年第二季度):
git log --exclude-first-parent-only feature ^master
feature
这将列出来自分支的所有提交。
在 Git 2.36(2022 年第二季度)中,“ git log
” (man)和朋友们学会了一个选项--exclude-first-parent-only
,即仅沿第一父链向下传播 UNINTERESTING 位,就像--first-parent
选项显示仅沿第一父链缺少 UNINTERESTING 位的提交一样。
请参阅Jerry Zhang ( ) 的提交 9d505b7(2022 年 1 月 11 日)。(由Junio C Hamano 合并 -- --在708cbef 提交中,2022 年 2 月 17 日)jerry-skydio
gitster
git-rev-list
: 添加 --exclude-first-parent-only 标志签字人:Jerry Zhang
为了能够枚举用户的本地更改,了解某个分支何时在历史上首次与某个集成分支分道扬镳很有用。
但是,这些局部变化可以包括任意的合并,因此在寻找分歧点时需要忽略这种合并结构。为了做到这一点,请教“
rev-list
”家庭接受“--exclude-first-parent-only
”,这将排除的提交的遍历限制为仅遵循第一个父链接。-A-----E-F-G--main \ / / B-C-D--topic
在此示例中,目标是返回集合
{B, C, D
},它表示已合并到分支中的主题main
分支。( man )最终将不会返回任何提交,因为 exclude最终也会遍历提交。( man ) 但是会根据需要返回。
git rev-list topic ^main
main
topic
git rev-list --exclude-first-parent-only topic ^main
{B, C, D}
为新标志添加文档,并澄清文档
--first-parent
以表明它仅适用于遍历包含的提交集。
rev-list-options
现在在其手册页中包含:
查找要包含的提交时,在看到合并提交时仅关注第一个父提交。
在查看特定主题分支的演变时,此选项可以提供更好的概览,因为合并到主题分支往往只是不时调整到更新的上游,并且此选项允许您忽略引入的单个提交通过这样的合并你的历史。
rev-list-options
现在在其手册页中包含:
--exclude-first-parent-only
查找要排除的提交时(使用“{caret}”),在看到合并提交时仅遵循第一个父提交。
鉴于任意合并可能是有效的主题分支更改,这可用于从主题分支与远程分支分歧的点查找主题分支中的更改集。