Git - 如何在多次合并到 master 和从 master 合并后区分分支中*引入*的更改?

Git - how to diff changes *introduced* in a branch after multiple merges to and from master?

场景如下。当我的团队成员开始处理一项功能时,我们会分支 master 以创建 feature 分支。然后,我们经常(至少每隔几天)将 master 合并到 feature 中以使其保持最新。功能完成后,我们会进行代码审查并进行必要的更改,然后将 feature 合并到 master 中。代码审查过程是:将 master 合并到 feature 以确保它是最新的,然后 diff master feature 以查看可以很好地审查的整套功能代码更改。

以上方法运行良好,但需要在 feature 合并到 master 之前 完成整个代码审查过程。不幸的是,项目进度有时要求我们在实施后立即将 feature 合并到 master,以便测试团队可以开始测试它,并且我们必须在 [=67] 之后进行代码审查=] 它已被合并到 master 中。这种预审合并到 master 有时会随着功能的一部分完成而发生多次。

以下是事件的时间轴示例:

  1. master 分支 feature
  2. feature 上进行更改。
  3. master 合并到 feature 以更新它。
  4. feature 进行更多更改。
  5. feature 合并到 master 以便进行测试。
  6. feature 进行更多更改。
  7. master 合并到功能中以使其保持最新状态。
  8. feature 合并到 master 以便进行测试。
  9. feature 现在可以进行代码审查了。

我的问题是:feature如何审核?具体来说,我如何隔离 feature 上引入 的所有代码更改的逐行“差异”(但现在也存在于 master 中)没有看到其他地方引入的更改(但现在 feature 中也存在)? masterfeature 之间在两个方向上发生了多次合并。

这可能吗?

当您将功能合并到 master 时,您无能为力将更改与一个分支或另一个分支分开。如果你将特征合并到master,方法是:

git diff master...feature # notice 3 dots

我说:如果你将功能合并到主控中。将 master 合并到 feature 中是可以的,diff 工作。

Unfortunately the project schedule sometimes demands that we merge feature to master as soon as it's implemented so that the test team can begin testing it,

git checkout -b test-feature-as-of-x master; git merge feature 和您的测试团队是否可以在 test-feature-as-of-x 上猛击而不用会被拒绝的代码污染 master 历史记录?

随便,从上游找到最旧的合并库,

oldest-base() {
        ( git rev-list --first-parent ; git rev-list --first-parent  ) \
        | awk 'seen[]++ { print;exit }'
}

然后 oldest-base feature master 找到原始主提交功能的分支。要查看 feature 中的所有更改,而没有 master 内容妨碍您可以

git checkout -b review `oldest-base feature master`
git cherry-pick -n --first-parent --no-merges ..feature

这将只引入第一个父提交的功能,从 master 中删除所有合并。