在分支合并之前恢复到特定状态
Posted
技术标签:
【中文标题】在分支合并之前恢复到特定状态【英文标题】:Revert back to specific state before branches were merged 【发布时间】:2015-11-11 08:10:05 【问题描述】:git 霸主,听我的恳求:
我有一个 git 分支,称它为“master”(我知道是原始的)。现在,我也一直在研究另外两个分支,同时称它们为“dammit”和“mistake”。完成后,两个分支都合并到“master”中,然后到生产中。
问题是,我怀疑在这些分支中所做的某些更改是有害的(为什么我认为这无关紧要),所以我想恢复到在我开始在分支上工作之间的某个特定提交(“错误”和“该死”。所以,假设我从 8 月 1 日开始研究它们并在 8 月 10 日合并,我想回到 8 月 3 日)。 但是,如果我回到 8 月 3 日,似乎在该日期之前在侧分支上所做的提交仍将在我的“master”上。
我可以使用某种“git revert”魔法来实现这一点吗?一些我不知道的 git 命令?
也许对 git rev-list --parents -n 1 <commit>
进行了一些更改?那不是我真正想要的,那么我又不能称自己为 git 专家。
我不可能是唯一遇到此问题的人(尽管搜索 SO 可能会给人这种印象)。
帮助?
【问题讨论】:
【参考方案1】:但是,如果我回到 8 月 3 日,似乎在该日期之前在侧分支上所做的提交仍将在我的“master”上。
这是预期的行为。 git revert
不是“重置”某些提交,它基本上会拍摄您还原的提交的负面快照并创建一个新提交。
如果你真的想摆脱错误的 git merge。你必须做一个git reset
。但请注意! git reset
是一个重写历史的命令。因此,如果您的历史是公开的,并且有多个贡献者,您将在推送重写的历史后遇到麻烦。如果没有,你可以放心地做一个
git reset --hard <commitIDOfTheComitFrom3rdAugust>
然后在你解决所有问题之后
git push --force origin <whatever>
【讨论】:
问题是,重置到 8 月 3 日的提交不会留下合并分支的残余,在特定提交之前提交吗?我在这里看到了一些参考资料:***.com/questions/2389361/undo-a-git-merge 声明我应该“标记”主分支。对我来说听起来像是解决方案的一半。还是我错过了什么? 假设您有以下graph。将master
重置为第三个灰色提交会“忘记”其间的所有其他提交,尤其是合并的提交。
哈,很酷的库,下次有问题时我会使用它 :) 所以是的,左边第三个节点肯定是这种情况。但是如果我想回到右边的第三个节点(比如说左边的第一个蓝色节点是 8 月 1 日)呢?
呵呵是的。好的,所以您想重置蓝色路径,让我们将其称为 branch damnit
到第一个蓝色节点。然后你必须检查damnit
并将其重置为第一个蓝色节点。
确实,如果我只需要担心这两个分支,那就行得通。不幸的是,这是一个共享仓库,我们有 20 多个合并的分支需要恢复,这就是为什么我希望找到某种捷径。以上是关于在分支合并之前恢复到特定状态的主要内容,如果未能解决你的问题,请参考以下文章