V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
0xABCD
V2EX  ›  程序员

git log 没有办法单独查看当前分支上的 commit?

  •  
  •   0xABCD · 2018-12-03 17:51:48 +08:00 via Android · 6582 次点击
    这是一个创建于 2183 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景是平时分支之间经常互相合并,我想要单独看一下在当前分支上的 commits log,没有找到对应的子命令?倒是找到一个--no-merges 选项,但是它只能把合并代码时新生成的 merge commit 去掉,不能把从别的分支上 merge 过来的 commit 去掉

    12 条回复    2018-12-04 00:32:09 +08:00
    0xABCD
        2
    0xABCD  
    OP
       2018-12-03 19:16:54 +08:00 via Android
    @AlisaDestiny 感谢回复,我搜到过这个答案,跟我描述的不符,他答案中提到的两个分支没有合并过,他是从 master 切出来的分支,然后比如有 3 个提交,他想找出来的是这 3 个新增的提交,而我的问题是,两个互相合并过的分支怎样才能找出最初在本分支上的提交,不包含 merge 过来的。比如 A 分支有 commit a,B 分支有 commit b,现在他俩一合并,那么 A 分支就有了 commit b,这时我怎么才能只过滤出 commit a,即一开始就是在 A 分支的 commit
    dbolo123
        4
    dbolo123  
       2018-12-03 19:55:13 +08:00 via Android
    这样呢?假设有 b1,b2,b3 只看 b1 的,git log b1 ^b2 ^b3
    dbolo123
        5
    dbolo123  
       2018-12-03 19:57:59 +08:00 via Android
    @dbolo123 看错了,请忽略
    SoloCompany
        6
    SoloCompany  
       2018-12-03 23:17:18 +08:00
    > 两个互相合并过的分支怎样才能找出最初在本分支上的提交

    你是指这个?
    git log B..A
    0xABCD
        7
    0xABCD  
    OP
       2018-12-04 00:07:33 +08:00
    @hzwjz #3 仔细读完了你贴的链接,好像很接近我想要的了,我有个疑惑,这里的--first-parent 指的是哪个分支,假如有两个分支 dev 和 feature-1。有的时候是 feature-1 merge 到 dev,有的时候又是 dev merge 到 feature-1,那么 feature-1 分支上就会有这两种 merge commit (最终也会从 dev 拉到 feature-1 ),git 在这种情况下,--first-parent 应该指的是谁呢?
    0xABCD
        8
    0xABCD  
    OP
       2018-12-04 00:14:24 +08:00
    @SoloCompany #6 不是,你说的这个命令区分不出**已经相互合并**的两个分支的提交,因为两个分支的 commit 已经相同了,git log B..A 的意思是找出在 A 分支上但是不在 B 分支上的 commits
    SoloCompany
        9
    SoloCompany  
       2018-12-04 00:16:51 +08:00 via iPad
    那你可能想找的是 — no-merges
    SoloCompany
        10
    SoloCompany  
       2018-12-04 00:20:25 +08:00 via iPad
    发早了,请忽略

    应该是说 — first-parent
    所有的 merge parent 其实是有顺序的,你没有办法指定选择一个图里面的多条路径里面的一条,只能都选最左或最右
    0xABCD
        11
    0xABCD  
    OP
       2018-12-04 00:25:21 +08:00
    @SoloCompany #10 可是最左或者最右策略可能无法保证 first-parent 始终是同一个分支,那我只想看某个分支上的提交就无法实现了?
    SoloCompany
        12
    SoloCompany  
       2018-12-04 00:32:09 +08:00 via iPad
    你的理解就是错误的,一个分支的所有历史并不是线性的,而是多路径的,不存在你说的一个分支所对应的唯一路径

    a merge b 的结果是 c
    那么多 a 和 b 都同时属于 c 所在的分支,a 和 b 只有路径的区分(左还是右,或者说 1 还是 2 )
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5406 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 05:47 · PVG 13:47 · LAX 21:47 · JFK 00:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.