我已经创建了一个测试git项目,以确定如何在两个分支之间获取不同的日志。
在大多数情况下,我们会遇到这样的情况:分支大师已经选择了一些提交来掌握,见下图:
“I”提交被选为主分支。我对master和dbg_feature之间不同日志的预期结果应仅为“J”。
但实际上,当我在命令下运行时:
git cherry -v master dbg_feature
我会得到“我”和“J”,樱桃挑选的一个“我”仍列在其中:
+ a1915061be2f445d322abc7bfb7d19bbb357b917 I
+ 6486e899e07b6d6f539cbcad10655dcc345f434d J
如果我在命令下运行:
git log --oneline --no-merges master..dbg_feature
输出如下:
6486e89 J
a191506 I
如果运行git rev-list命令如下:
git rev-list --oneline --no-merges --cherry-pick --right-only master...dbg_feature
6486e89 J
a191506 I
结果与git log相同。
那么在这两个分支之间得到确切的不同日志的正确命令是什么?
答案 0 :(得分:0)
我不清楚“不同的承诺”是什么意思。但是,您提到使用git cherry
表明您正在讨论the git rev-list
documentation所指的“等效”或“补丁等效”提交(或者他们相反,我和他们称之为“不等价”的提交) ):
--cherry-mark
与
--cherry-pick
一样(见下文),但标记等效提交=
而不是省略它们,而不等价的提交+
。
--cherry-pick
当提交集受限于对称差异时,省略任何在“另一方”引入相同更改的提交。
例如,如果您有两个分支
A
和B
,则只列出其中一侧的所有提交的常用方法是使用--left-right
(请参阅下面的示例)--left-right
选项的描述。但是,它显示了从另一个分支中挑选出来的提交(例如,“b上的第3个”可能是从分支A
中挑选出来的)。使用此选项,这些提交对将从输出中排除。
--left-only
--right-only
列表仅在对称范围的相应一侧提交,即仅
<
>
--left-right
--cherry-pick --right-only A...B
。{/ p>}。例如,
B
省略A
中A
提交的提交,或者是+
提交的提交等效提交。换句话说,这会列出git cherry A B
的{{1}}次提交。更准确地说,--cherry-pick --right-only --no-merges
给出了确切的列表。
--cherry
--right-only --cherry-mark --no-merges
的同义词;有用的是将输出限制在我们这一侧的提交中,并使用git log --cherry upstream...mybranch
标记已应用于分叉历史记录另一侧的输出,类似于git cherry upstream mybranch
。
同样,所有这些都是git rev-list
命令的参数。由于git rev-list
和git log
几乎是相同的命令(除了输出格式之类的小细节:-)),它们也与git log
一起使用。