【问题标题】:How can I re-merge commits that were reverted in github?如何重新合并在 github 中恢复的提交?
【发布时间】:2015-05-20 03:47:43
【问题描述】:

我会尽量简明扼要地描述我目前的情况,如果你能给我一些建议,我将不胜感激。

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

在对特性分支进行了一些调整之后,我想确保它可以再次进入,所以我在特性分支上使用了“git merge master”(就像我一直做的那样)以确保一切都是最新的。

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

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

有人可以帮助我理解这一点吗?

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

【问题讨论】:

  • 你好。在您的控制台中尝试git reflog。它将向您显示对您的仓库所做的全部历史记录(不是分支,而是完整的仓库)。检查所需的时间点并从那里继续。
  • 感谢您的评论!就我而言,提交贯穿始终。分支已经建立了几个月,我没有一个干净的地方可以重置。我认为 rebase 是我需要的,只是想弄清楚如何完全删除我从功能分支中再次添加的提交
  • 好的,我把它作为答案发布 - 你需要的变基
  • 我建议不要在这里变基。更改已发布分支的历史将使您非常不受欢迎。

标签: git github version-control revert


【解决方案1】:

我曾经遇到过同样的问题。我的解决方案是在将 master 合并回我的分支之前“恢复还原”。

这样做会为您留下所有更改,包括您已获得的新修复。

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

之后,您的固定分支应该可以直接合并回主分支,没有问题。

【讨论】:

  • 我很欣赏这种洞察力,丹尼尔。到目前为止,我已经尝试了许多不同的选项,由于这些提交的复杂性和它们的绝对数量,我认为还原还原将是我最安全的选择。
【解决方案2】:

我认为 rebase 是我需要的,只是想弄清楚如何从功能分支中完全删除我再次添加的提交

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

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

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

【讨论】:

  • 感谢您的回答!所以在我的情况下,因为 revert 并没有真正删除提交,我想从分支中删除所有提交吗?看起来这个命令是dd。而且看起来我需要删除的第一个提交是超过 100 次之前的提交,所以 HEAD~100?
  • 没错。你明白了:-)
  • 或者您可以恢复到所需的时间点,从该点创建新分支,然后从该点交互式地变基
猜你喜欢
  • 2021-04-23
  • 2020-10-04
  • 2021-04-13
  • 2012-10-26
  • 2015-11-26
  • 2019-08-06
  • 2015-08-29
  • 1970-01-01
  • 2017-06-11
相关资源
最近更新 更多