Git日志图,但只有一些分支
我想做一些Gitk已经做过的事情,除了在命令行中。我希望显示来自一个分支的所有提交,以及来自另一个分支的所有提交,但不显示其他历史记录。让我们更具体一点:我说的是一个特性分支加上主分支,但没有其他东西(不管还有多少其他东西)。如何做到这一点 “从分支提交”是指在分支上显式提交(并推送)的提交,而不是由合并带来的提交。对于我来说,看到提交实际上是一个合并就足够了,正如我希望在提交消息中看到的,这是一个合并,这在这里告诉了我很多 为了在Gitk中实现这一点:我创建了一个视图,其中列出了我想要查看的分支,并选中“限制到第一个父级” 举个例子Git日志图,但只有一些分支,git,graph,git-log,Git,Graph,Git Log,我想做一些Gitk已经做过的事情,除了在命令行中。我希望显示来自一个分支的所有提交,以及来自另一个分支的所有提交,但不显示其他历史记录。让我们更具体一点:我说的是一个特性分支加上主分支,但没有其他东西(不管还有多少其他东西)。如何做到这一点 “从分支提交”是指在分支上显式提交(并推送)的提交,而不是由合并带来的提交。对于我来说,看到提交实际上是一个合并就足够了,正如我希望在提交消息中看到的,这是一个合并,这在这里告诉了我很多 为了在Gitk中实现这一点:我创建了一个视图,其中列出了我想要查看的分
L-M : other stuff
\
A-B-C-I : feature
/
... -D-E-F-J : main
/ /
/ G-H-K : more other stuff
/
... potentially even more stuff contributing to main via merges (not explicitly known)
C
是B
和F
合并的结果
E
是D
和H
合并的结果
B
是A
和M
合并的结果
A-B-C-I - feature
/
D-E-F-J - main
我想看A
,B
,C
,I
,D
,E
,F
和J
,但不是G
,H
,K
,L
和M
A-B-C-I - feature
/
D-E-F-J - main
奖励:也看不到J
。。。
奖金的奖金:。。。但不知何故,我们知道F
曾经是main
,并给它贴上这样的标签
A-B-C-I - feature
/
D-E-F - was main
编辑:如果我使用
--第一个父级主功能
我几乎得到了我想要的,除了第二个父级合并关系没有显示(即使它们存在,Gitk也会显示它们)。现在怎么办?一个符合您在图表上描述的答案:
git log --oneline --graph main feature ^K ^M
要排除J
,只需不列出main
:
git log --oneline --graph feature ^K ^M
在
git log
参数中,^xxx
(请注意,^
放在提交ish之前,而不是之后)表示“从提交列表中排除xxx及其所有祖先”一个答案,该答案应符合您在图表中描述的内容:
git log --oneline --graph main feature ^K ^M
要排除J
,只需不列出main
:
git log --oneline --graph feature ^K ^M
在git log参数中,
^xxx
(注意,^
放在提交ish之前,而不是之后)意味着“从提交列表中排除xxx及其所有祖先”无法100%可靠地满足您的所有要求。LeGEC的回答提到了你最初问题中的具体例子,但我不认为你的后续行动会带来那么多惊喜
对于您的基本要求,您可以尝试以下方法
git log --graph --oneilne --first-parent main feature
git log --graph --oneline --first-parent $(git merge-base main feature) feature
如果你遵循典型的惯例,那么这可能会给你想要的。但在某些情况下它不会。我会再谈这个问题
为了你的“奖金”,你可以做如下事情
git log --graph --oneilne --first-parent main feature
git log --graph --oneline --first-parent $(git merge-base main feature) feature
因此,您不是说main
,而是说您希望从两个分支都可以访问到上一次提交之前的历史记录
我不知道如何在日志中动态标记合并基提交(额外的好处)。我想你可以标记你的合并基数
git tag was_on_master $(git merge-base main feature)
git log --graph --oneline --first-parent feature was_on_master
git tag -d waS_on_master
所以现在。。。什么时候不行,为什么会这样
在git中,提交不“属于”分支。没有历史记录告诉您提交“是在哪个分支上创建的”。分支和提交之间的唯一关系是,可以从给定的分支访问提交,也可以不访问提交。在合并提交的情况下,还可以使用父指针的顺序来区分合并可能发生在哪个“方向”
如果您在branch\u A
上,并且您说git merge branch\u B
,那么您所在的提交(历史记录“from”branch\u A
)将是合并的第一个父级。这就是——第一个家长以后将要做的事情。并且,如果在发出merge命令时,实际上签出了branch\u A
(与在分离头状态下签出相同的提交相反),branch\u A
会自动移动到合并上;因此,假设通常是“第一个父项意味着该分支的历史”
但有些情况下,有人可能会做一些事情,把事情搞砸。假设你有
... A <--(branch_A)
... B <--(branch_B)
除非您的配置阻止,否则第二次合并将作为快进处理,从而导致
... A -- M <--(branch_A)(branch_B)
/
... B
。。。A--M没有办法100%可靠地满足您的所有要求。LeGEC的回答提到了你最初问题中的具体例子,但我不认为你的后续行动会带来那么多惊喜
对于您的基本要求,您可以尝试以下方法
git log --graph --oneilne --first-parent main feature
git log --graph --oneline --first-parent $(git merge-base main feature) feature
如果你遵循典型的惯例,那么这可能会给你想要的。但在某些情况下它不会。我会再谈这个问题
为了你的“奖金”,你可以做如下事情
git log --graph --oneilne --first-parent main feature
git log --graph --oneline --first-parent $(git merge-base main feature) feature
因此,您不是说main
,而是说您希望从两个分支都可以访问到上一次提交之前的历史记录
我不知道如何在日志中动态标记合并基提交(额外的好处)。我想你可以标记你的合并基数
git tag was_on_master $(git merge-base main feature)
git log --graph --oneline --first-parent feature was_on_master
git tag -d waS_on_master
所以现在。。。什么时候不行,为什么会这样
在git中,提交不“属于”分支。没有历史记录告诉您提交“是在哪个分支上创建的”。分支和提交之间的唯一关系是,可以从给定的分支访问提交,也可以不访问提交。在合并提交的情况下,还可以使用父指针的顺序来区分合并可能发生在哪个“方向”
如果您在branch\u A
上,并且您说git merge branch\u B
,那么您所在的提交(历史记录“from”branch\u A
)将是合并的第一个父级。这就是——第一个家长以后将要做的事情。并且,如果在发出merge命令时