如果有主题分支,是否有办法显示在该分支上进行的唯一更改?
主题分支可能已经合并到master。
用例是指有人想在合并后的6个月内看到该主题分支的唯一更改。
答案 0 :(得分:2)
如果主题分支合并为fast-forward merge,则无法执行此操作,因为无法确定主题分支的启动位置。
然而,在许多情况下,合并将不是快进合并,因为在主干分支正在开发时,在主干上进行了提交。在这种情况下,将会有一个合并提交,这使我们能够实现您的要求:
如果合并主题分支的提交由commit-ish $topic_merge
表示,那么您可以这样做:
git log $topic_merge --not $topic_merge^
这将排除合并之前的主干(即合并提交的第一个父级)及其所有祖先的所有提交。
请注意,这也可以写为
git log $topic_merge ^$topic_merge^
或
git log $topic_merge^..$topic_merge
虽然在使用zsh
时,您可能必须避免在第一种情况下扩展文件名:
git log $topic_merge \^$topic_merge^
这甚至适用于octopus merges,因为它将显示合并带来的任何分支的所有更改,这些更改尚未在主干中。
唯一的缺点是它可以包含合并到主题分支中的任何其他提交。如果您不想包含这些,那么您需要再次依赖合并提交的存在,以便将主题分支提交与合并到主题中的提交区分开来。这需要递归完成,结果从上面给出的结果中减去。
答案 1 :(得分:0)
我遇到了各种日志选项,用于处理cherry-pick {able,ed}提交,我很确定一些变体
git log --decorate --oneline --cherry master...topic
将在这里服务(注意三个点)。
供参考,git log和git revisions(指定修订和修订集的方法)文档。
要查找topic
到master
的最新记录合并,无论topic
ref是否已被删除,
git log --oneline -1 --first-parent --merges --grep="^Merge branch 'topic'" master
并记住它供以后使用,例如
merge=$(git log --pretty=%H -1 --first-parent --merges --grep="^Merge branch 'topic'")
所以你可以
git log --decorate --oneline --cherry $merge^...$merge^2
其他选择:
在通常情况下,topic
仍处于活动状态,您只关心与他人合并的变化:
git diff master...topic
如果topic
参考号已被删除,请查找master
到topic
的最新记录合并,即如果您在此处处理考古案例:
git log --oneline -1 --first-parent --merges --grep="^Merge branch 'topic'" master
您可以使用
为合并和merged-tip提交ID设置变量merge=$(git log --pretty=%H -1 --first-parent --merges \
--grep="^Merge branch 'topic'" master)
topic=$(git rev-parse -q --verify $merge^2)
编辑:总有一天我保证我会停止提供键盘到编辑框的命令。以上工作现在。
如果您决定不记录合并,那么当然没有合并的记录。
记录的合并可能会使提交图形变得混乱,如果有很多这样的合并可能会使其难以理解;此外,提交消息主题旨在足以确定其中所完成工作的范围。所以git通常在可能的情况下更喜欢线性历史。为了避免依赖于提交主题,要确保在祖先链中记录行政上重要的边界(对于大型项目,这通常是一个非常好的主意),进行合并并指定--no-ff
。
获取当前topic
提示或未通知其最近合并的提示:
topic=$( git rev-parse -q --verify refs/heads/topic \
|| git rev-parse -q --verify $( git log --pretty=%H \
-1 --first-parent --merges \
--grep="^Merge branch 'topic'" master)^2 )
$topic
分支中第一次提交主人:
first=`git rev-list master..$topic --reverse --first-parent | sed q`
该提交的第一个父级是来自master的分支点:
branchbase=`git rev-parse $first^`
显示自历史首次分歧以来$主题的所有更改:
git diff $branchbase..$topic
答案 2 :(得分:-1)
我相信这里的答案是不可能的。
原因是git没有跟踪最初创建分支的位置。分支只是一个指向分支尖端的指针。
因此,如果自最初创建主题分支以来已对主题分支进行了merge-commits,则无法明确说明哪个提交启动了分支。