【问题标题】:git diff/log retrieve also merged commitsgit diff/log retrieve 也合并了提交
【发布时间】:2021-05-07 07:32:46
【问题描述】:

鉴于以下模式,其中发布到 master 的修补程序 (D) 合并回测试分支,我们需要找到一种方法,在 test 和 master 之间存在差异,以获得 (B)、(C) 和 (D3 )。

hotfix      /------------D
           /              \
master ---A----------------D2--------
             \              \
test          \----B----C----D3------

每个 git diff(bot 2/3 点)总是返回 B 和 C,但不返回 D3,所以我们以 git log 序列结束:

结帐测试:

git log --pretty=format: --name-only HEAD...$( git log --format=%H origin/master..HEAD | tail -1 )^ | sort -u -k1,1

这个想法是检索自公共锚点(B、C、D3)以来的所有提交并检索每个更改的资源。 这“似乎”可行,但我们也许有更好的方法来完成我们的任务。

这种方法有很多缺点:

  • 我们放松了对差异过滤器的控制:我们还需要从检索中删除任何已删除的资源
  • 即使未更改,也会检索每个“还原”的资源

有没有更好的解决方案?


尝试更好地解释问题

要求:生成一个部署包,在 master 和 test 之间更改资源。资源必须被检索、打包并安装到多个环境中。

T0 : git diff master...test 从 C、B 检索每个资源。然后将带有资源的捆绑包安装到 ENV1 中

hotfix      
           
master ---A--------------
             \             
test          \----B----C

T2 : git diff master...test 从 C、B 但不是 D3 检索每个资源。 Bundle 不会包含 D3 资源,也不会更新 ENV1。

hotfix      /------------D
           /              \
master ---A----------------D2--------
             \              \
test          \----B----C----D3------

该语句必须检索测试中的资源而不是 master 上的资源,还要检索从 master 合并回来的资源以保持 ENV1 更新。 对齐 ENV1 的唯一方法是在测试中提交/事件

提前致谢

【问题讨论】:

    标签: git git-diff git-log


    【解决方案1】:

    注意:您的图表有 3 个提交,名为 D ....

    hotfix      /------------D1
               /              \
    master ---A----------------D2--------
                 \              \
    test          \----B----C----D3------
    

    就提交范围而言:我认为您正在寻找master..D3

    git log [any options] master..D3
    

    如果您想列出在AD3 之间修改的文件ACD2 之间的合并基础:

    git merge-base C D2
    # or, starting from D3 :
    #  -  'C' is 'D3^'  (first parent of D3)
    #  - 'D2' is 'D3^2' (second parent of D3)
    git merge-base D3^ D3^2
    

    您可以使用它来获取 AD3 之间的差异:

    git diff [options] $(git merge-base D3^ D3^2) D3
    

    如果您只想列出修改过的文件,您可以在[options] 中使用--name-status--name-only

    【讨论】:

    • 是的,已修复.. 使用 git diff 不会检索使用 D3 提交的文件,这些文件与主文件相同。何时需要检索它们
    • 确实,因为master 已经合并,3 点符号并不是从我想的地方开始的。更新了我的答案。
    • 谢谢,我想我明白了合并基础的意义,但是让合并基础动态化怎么样?下一步是检索 D3^ 和 D3^2。如果另一个提交在测试( E )上成功等等......也许可以交替直接提交和从 master 合并回来如何使用 merge-base?目标是使用通用语句
    • 嗨,我很高兴这个答案有帮助,但我必须说,从你的问题中理解你的目标更多的是猜测而不是理解。阅读您的评论,老实说,我不明白您的意图或用例是什么。请花时间用更简单的语句写下您需要什么以及您尝试过什么,并为此提出一个新问题。
    • 添加一些上下文以更好地解释(希望),无论如何谢谢:)
    猜你喜欢
    • 2020-02-15
    • 2011-10-06
    • 2019-08-22
    • 1970-01-01
    • 2013-07-07
    • 2019-03-11
    • 2019-02-14
    • 2015-04-02
    • 2014-08-17
    相关资源
    最近更新 更多