如何解决git diff/log 检索也合并了提交
鉴于以下架构,其中发布到 master 的修补程序 (D) 合并回测试分支,我们需要找到一种方法,在 test 和 master 之间存在差异,以获取 (B)、(C) 和 (D3) ).
hotfix /------------D
/ \
master ---A----------------D2--------
\ \
test \----B----C----D3------
每个 git diff(bot 2/3 dots)总是会返回 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 中检索每个资源。捆绑包将不包含 D3 资源,也不会保持 ENV1 更新。
hotfix /------------D
/ \
master ---A----------------D2--------
\ \
test \----B----C----D3------
该语句必须检索在测试中而不是在 master 上的资源,以及从 master 合并回来的资源以保持 ENV1 更新。 对齐 ENV1 的唯一方法是从提交/测试事件
提前致谢
解决方法
注意:您的图表有 3 个名为 D
....
hotfix /------------D1
/ \
master ---A----------------D2--------
\ \
test \----B----C----D3------
就提交范围而言:我认为您正在寻找 master..D3
:
git log [any options] master..D3
如果您想列出在 A
和 D3
之间修改的文件:A
是 C
和 { 之间的合并基础{1}}:
D2
您可以使用它来获取 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
和 A
之间的差异:
D3
如果您只想列出修改过的文件,您可以在 git diff [options] $(git merge-base D3^ D3^2) D3
中使用 --name-status
或 --name-only
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。