git:确定分支上更改的文件

git:确定分支上更改的文件,git,Git,我们有一个git工作流,其中包含最新的稳定版本的代码 包含在我们的主分支中。持续的开发和错误修复已经完成 在单独的分支中,合并到一个临时分支中,以便在 合并到master中。在将错误修复合并到临时分支之前, 开发人员需要将登台分支合并到他们的错误修复分支中 使用自其分支后发生的任何更改来测试其更改 大师。一切就绪后,修复错误分支将合并到临时分支中。 我们的流程规定,我们必须提供一个列表,列出所有随时间变化的文件 错误修正的结果。我们希望避免给开发人员带来负担 这种额外的会计工作是通过强迫他们做一

我们有一个git工作流,其中包含最新的稳定版本的代码 包含在我们的主分支中。持续的开发和错误修复已经完成 在单独的分支中,合并到一个临时分支中,以便在 合并到master中。在将错误修复合并到临时分支之前, 开发人员需要将登台分支合并到他们的错误修复分支中 使用自其分支后发生的任何更改来测试其更改 大师。一切就绪后,修复错误分支将合并到临时分支中。 我们的流程规定,我们必须提供一个列表,列出所有随时间变化的文件 错误修正的结果。我们希望避免给开发人员带来负担 这种额外的会计工作是通过强迫他们做一些事情,比如标记他们的分支机构 当它们从主节点分支,然后在合并回主节点之前生成列表时 去登台。那么,确定在上更改的文件的最佳方法是什么 将下面的错误修复分支合并到暂存分支后,它会出现吗? 本质上,我们想要的是从commit(1)开始更改的文件,但是 没有任何由于将临时分支合并到错误修复中而更改的文件 分支机构

那么:

git checkout bugfix
git diff HEAD~1 master

这将为您提供合并前的错误修复提交和主控之间的差异。

假设您在合并提交(4)和(F)中没有做任何坏事,您所需要的只是:

git diff --name-only commit-B commit-3
如果你真的想变得花哨,你可以这样做:

git diff --name-only $(git merge-base bugfix~1 master) bugfix~1
git merge base
查找两个命名提交的最新共同祖先,
bugfix~1
指的是
bugfix
之前的提交,即提交(3)

如果由于某种原因,临时分支被合并了好几次,那么您必须进行一些这样的区分,并采用联合,例如:

(git diff --name-only B 3; git diff --name-only 5 13) | sort -u

三个问题:不需要签出,只需使用
bugfix~1
而不是
HEAD~1
;您不想与master有所不同,因为它已经获得了与bug修复无关的其他更改;这会打印出一个完整的差异,而不是OP想要的文件列表。还应该注意的是,由于这显然是一个常见的工作流,您的开发人员可以在创建分支时标记他们的分支点,从而使事情稍微容易一些。因此,稍后他们可以使用git diff--name-only bug-fix\u start bug-fix~1作为示例。如果他们使用标记,请小心不要意外地传播它们。特别是,
git pull
默认情况下获取标记,因此,如果开发人员直接从彼此获取标记,那么很快每个人的repo中都会有大量临时标记。(我只是用分支代替,因为它们更符合临时标记的概念,而不是标记。)出于好奇,你是不是提倡一个分支只是为了标记另一个分支的开始?我建议使用标记,因为找到分支的起点虽然不难,但可能有点模糊。你的意思是:
git checkout-b错误修复;git签出-b错误修复\u启动
?也许我误解了。如果所有开发人员都需要用一种更简单的方法来知道bug修复分支的起点,那么传播分支或标记它的标记之间真的会有区别吗?我的假设是,只有一个开发人员需要知道分支的起点。如果你在这种情况下使用了一个标签,而有人从你身边抽走了,那么你最终可能会让每个人都拥有这个原本是临时的标签,然后即使你从回购协议中删除了它,它也会挂在那里。由于此起点标记的生存期与分支的生存期相同,因此它也是分支是有意义的。Git命令(例如,如上所述的pull)对标记的思考方式源自于一种期望,即它们是永久的
(git diff --name-only B 3; git diff --name-only 5 13) | sort -u