如何修复一个分支的历史记录,该分支被重新定位、强制推送并合并到其他人的本地分支中?两次?

How to fix history in a branch that was rebased, force-push'd, and was merged into someone else's local? Twice?

在我们的组织中,我们 git rebase 我们的分支机构。我们定期重新设置 master 以保持最新状态,git push --force-with-lease,然后让任何其他开发人员知道。

开发人员 A 与开发人员 B 在一个分支上合作。开发人员 B 重新基于 master 并强制推送分支。

开发人员A犯了一个错误,继续工作,当他试图推送时,好像遇到了冲突,他将rebased分支合并到他的本地,然后推送。

没有人注意到,几天后他又做了。

所以现在 git 历史记录包含两次或三次相同的提交,变基到 master 是一场灾难。

有办法解决吗?

是否最好从 master 中创建一个新分支并挑选非重复提交?在重复的情况下,挑选哪个提交重要吗?

Would it be best to make a new branch off master and cherry-pick the non-duplicate commits?

“最佳”总是很棘手,但这是一个很好的方法。

Does it matter which commit gets cherry-picked, in the case of duplicates?

如果它们确实是重复的,则不会。但是,如果他们做了一些稍微不同的事情——例如,如果一个是 rebase 或 cherry-pick 的副本,有合并冲突,并且是手动解决的——他们可能“大部分相同,但略有不同”,然后它会很重要。

构建全新分支的好处在于,您可以在最后验证它是否做了它应该做的任何事情,以及它的最终提交与分支的最终提交之间的差异当前的,只是您期望的不同之处。同时,原始系列的提交很容易获得。