尽管尽了最大的努力,我们还是让自己在 Git 存储库中使用了一个功能分支。最终结果是 agit diff develop..feature-branch
显示了完全出乎意料的差异。
例如,在开发中添加的一个文件在差异中显示为删除。许多其他文件显示了类似的问题,一些缺失,一些添加,许多意想不到的变化。一些应该存在的文件develop
甚至没有出现在差异中。当我们通过 Pull Request 查看代码时,我们首先注意到 Atlassian Stash 中的问题。挂起的合并是完全不正确的,在合并期间无法通过标准冲突解决方案来解决。
我们试图破译造成这种情况的原因,我们认为问题源于开发人员对已推送到源的功能分支中的提交执行了多次重置。这是为了“恢复”在拉取请求代码审查期间建议的一些更改。具体来说,我们认为这是事件的时间表。
- 从开发创建的功能分支
- 在功能分支上执行的工作
- 在 Atlassian Stash 中生成的拉取请求(PR 看起来不错,但建议进行一些小的编辑)
- 开发人员使用重置来恢复一些更改并将这些更改推送到原点
- 同时注意到开发和功能分支之间的小冲突
- 开发人员从开发更新功能分支以协调冲突并推送到原点
- 拉取请求 (diff) 显示出意料之外的差异,与之前的差异截然不同。预期提交的文件丢失,反之亦然
- 我尝试撤消(还原而不重置)“坏”合并并重试。但是 PR/diff 显示了对于挂起的合并相同的错误更改
- 然后我了解到开发人员在第一次从开发中合并之前使用了重置。
所以,我有三个问题。
我们如何需要“恢复”一个更正的功能分支,以便我们可以正确地将我们的更改合并到开发中?我的想法是从我们的功能分支中的一个提交中创建一个新的“好”功能分支,该分支已知会在重置之前发生。然后我可以从“坏”功能分支中挑选我们想要的提交到“好”分支中重新创建它。最后,我可以将“好”功能分支合并到开发中并删除“坏”功能分支。
如果我将“坏”功能分支合并到开发中,除了文件的不正确状态之外,还会有任何其他“损坏”泄漏到开发分支中。也就是说,被污染的“坏”功能分支会进一步污染开发分支及其下游的任何东西吗?我当然不打算这样做,但我确实想了解后果。
我所描述的重置会导致我看到的问题还是这可能与其他问题有关?