如何重新合并在 github 中还原的提交?

How can I re-merge commits that were reverted in github?

我会尽量简明扼要地描述我目前的情况,不胜感激。

今天早上我合并了一个代码的大功能分支,结果发现有一个严重错误。为了撤消它,我的同事在 GitHub 中恢复了合并(其中有几个提交)并且在拉动之后,一切似乎都很好。

在对功能分支做了一些调整后,我想确保它可以再次进入,所以我在我的功能分支上使用了 'git merge master'(就像我一直做的那样)以确保一切正常日期。

令人惊讶的是,结果是删除了我需要合并回主仓库的所有新代码!

这是因为分支上发生的还原吗?查看 git 日志,我可以看到所有提交仍然存在。更奇怪的是,github 中的拉取请求没有显示 diff 中的任何原始提交,只有我在恢复后所做的更改。

有人能帮我理解一下吗?

我知道有些人建议简单地还原还原,但我需要干净利落地还原,因为我所做的更改涉及大部分代码的结构。

I think that rebase is what I need, just trying to figure out how to completely remove the commits I am adding in again from the feature branch

如果你需要 "remoe/merge" 提交你应该使用 squash.
Squash 是变基选项之一。

为了使用它,您需要进行交互式变基。
git rebase -i HEAD~10 将打开一个 vi(或您正在使用的任何其他编辑器)并允许您 "reshuffle" 您的提交。您可以删除提交,将它们合并为一个,重新排序并混合更多。

您会在 vi 中找到一个选项列表以及您选择重新提交的提交列表(在上面的示例中,它将占用最后 10 个 HEAD~10

我 运行 曾经遇到过同样的问题。我的解决方案是 "revert the revert" 在将 master 合并回我的 b运行ch 之前。

它的作用是让您保留所有更改,包括您已获得的新修复。

git checkout master
git checkout -b master-with-revert-revered
git revert <revert commit id>
git checkout fixed-branch
git merge master-with-revert-revered

在那之后,你的 fixed-b运行ch 应该可以毫无问题地直接合并回 master。