Git日志图,但只有一些分支

Git日志图,但只有一些分支,git,graph,git-log,Git,Graph,Git Log,我想做一些Gitk已经做过的事情,除了在命令行中。我希望显示来自一个分支的所有提交,以及来自另一个分支的所有提交,但不显示其他历史记录。让我们更具体一点:我说的是一个特性分支加上主分支,但没有其他东西(不管还有多少其他东西)。如何做到这一点 “从分支提交”是指在分支上显式提交(并推送)的提交,而不是由合并带来的提交。对于我来说,看到提交实际上是一个合并就足够了,正如我希望在提交消息中看到的,这是一个合并,这在这里告诉了我很多 为了在Gitk中实现这一点:我创建了一个视图,其中列出了我想要查看的分

我想做一些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命令时