【问题标题】:How do you return the changes made the files in the current branch in comparison to the prod branch与 prod 分支相比,如何返回当前分支中文件所做的更改
【发布时间】:2022-12-06 07:30:03
【问题描述】:
我正在尝试以一种仅对已添加/触摸的文件开始测试的方式设置 CI/CD。本质上,工作流程如下:
-
开发人员从生产分支创建一个分支来测试更改。
-
他们进行某些更改,在本地进行测试,然后合并到生产分支。
-
但是,因为有各种开发人员不断合并更改,所以当您合并更改时,可能会有新的目录或文件在生产中。
因此,以下命令将返回开发分支和主分支之间的更改,同时包括双方缺少的内容:
git diff {my_development_branch} {master} --name-only -r
假设我在 master 中有这些文件:
A/file1
B/file2
C/file3
我创建了一个名为 my_development_branch 的分支,其中包含相同的内容,但现在我添加了一个目录和文件:
A/file1
B/file2
C/file3
D/file4
此时 master 分支可能有新的内容,所以它可能看起来像:
A/file1
B/file2
C/file3
Z/file26
使用git diff 将返回 D 和 Z,但对于我的用例,我只想获取我添加/触摸过的文件,这些文件只会是 D。有没有办法让 git 为我辨别这些信息?
【问题讨论】:
标签:
git
github
gitlab
cicd
【解决方案1】:
从开发商的角度前合并,你可以使用3-dot syntax version of diff:
git diff master...my_development_branch --name-only
这将仅显示自两个分支之间合并基础以来my_development_branch 上的更改。这通常与实际发生的变化非常接近,但不一定是完美的。要确定实际会发生什么变化,您需要实际进行合并。合并后,您可以立即使用:
git diff @~1 @ --name-only
(@ 是 HEAD 的简写,在本例中也是 master。)
笔记:将当前(合并)提交与其第一个父提交进行比较仅在合并功能分支时生成新的合并提交时才有效。在您描述的情况下,将创建一个新的合并提交,因为分支在合并时已过期。因为这并不总是保证是真的,所以许多人建议在合并到共享分支(例如 master 时)时使用 --no-ff,因此这种比较总是有效的。它还可以看到每次合并到 master 和 git log master --first-parent 的清晰图表。出于这个原因,在将 PR/MR 完成到共享分支时,许多工具默认为 --no-ff。