我有一些生产代码必须回滚,因为我被告知成功完成的测试没有完成。它被投入生产,交付给主分支机构,然后被称为";回滚";当用户发现未经测试的错误时。
请注意,我通常是唯一一个写信给这份回购的人,但我在度假时对它做了一些修改,我承认我有点困惑。
无论如何,我很确定我想根据旧的、bug之前的代码重新调整我的新代码的基础;回滚";代码的版本,我认为应该使用git rebase --onto
来完成
几篇文章帮助我至少了解了一些这方面的知识(显然我还有很多东西要学(。你在这里看到的图表格式是受到我读过的更有帮助的文章的启发。
因此,我有以下提交:
A---B---C---D---E---F---G---H---I
这些错误是在从B到E的生产代码中引入的,我根据这些代码编写了F到I。因此:
Known good
| Buggy and to discard
| | Good and needs to be replayed onto A
| | |
> -> ->
A---B---C---D---E---F---G---H---I
所以我最终得到了:
A---F---G---H---I
现在,根据我所做的所有阅读,我认为我应该运行的是:git rebase --onto A F I
但当我这样做的时候,我最终得到的代码中仍然有所有的坏代码
所以,我做错了什么,但我看不出是什么。
我已经阅读了以下内容(这些内容很有帮助,但似乎没有准确描述我的情况(https://medium.com/@gabriellamedas/git-rebase-and-git-rebase-on-toa3f83f9cce git-重新设置为特定标签https://git-scm.com/book/en/v2/Git-Branching-Rebasing
也许我做错了。我想回到生产当前的状态("回滚"状态(,然后回放我所做的开发。也许还有更好的方法。
我们将非常感激地接受任何帮助、建议、提示、批评、阅读更多信息的地方等。
好吧,我确实学到了一些关于git的东西,所以这很好。
我最终无法理解这一点,因为所有的文件和回复所说的,以及我所经历的,都不匹配。
我对此承担全部责任,但为了节省时间,我所做的是将所有从F
到I
的提交与A
的提交进行比较,然后手动将这些提交添加到A
。
然后我有了使用GitLab的好主意,因为它有一个很好的合并和diff接口,并将我的A-F-I
代码与B-E
代码进行了比较,看起来不错。
因此,我将A-F-I
伪造成一个新的分支,并请求将B-E
合并到其中
有些冲突,但没有什么太棘手的。更重要的是,代码看起来完全符合我的预期;一切都在我想要的地方。
它仍然需要测试,但我将从这里调试并手动更正所有内容。
谢谢大家的建议。你给了我一些想法,帮助我更好地理解事情,所以这很有帮助。
我仍然不明白我做错了什么,但没关系;学习有时就是这样。我确实觉得我的git知识进步了,也许对我来说更重要的是,我还没有离开;不要去那里"态度,这种情况有时会发生。
所以,这就是全部。再次感谢您抽出时间做出回应。这对我来说意义重大。
git rebase实际上是:
git rebase --onto A F~ I
您需要将F
的父级作为上游,因为rebase --onto
会在指定的上游提交之后重新设置所有提交的基础。
因此,当我以交互方式重新设置基准时,出现的文档会显示我想要包含的每个提交(在我的示例中为
F
到I
(,而不会显示我不想要的任何提交。
这意味着从git log
不显示的状态开始
A---B---C---D---E---F---G---H---I
因为如果是这样,git rebase-i a应该在其todo列表中显示从a到当前分支的所有提交(引用I
(
在启动所述rebase之前,请确保您在正确的分支上。