git 变基 - onto 仍然以我试图消除的代码结束 - 看不到我的错误在哪里



我有一些生产代码必须回滚,因为我被告知成功完成的测试没有完成。它被投入生产,交付给主分支机构,然后被称为";回滚";当用户发现未经测试的错误时。

请注意,我通常是唯一一个写信给这份回购的人,但我在度假时对它做了一些修改,我承认我有点困惑。

无论如何,我很确定我想根据旧的、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的东西,所以这很好。

我最终无法理解这一点,因为所有的文件和回复所说的,以及我所经历的,都不匹配。

我对此承担全部责任,但为了节省时间,我所做的是将所有从FI的提交与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会在指定的上游提交之后重新设置所有提交的基础。

因此,当我以交互方式重新设置基准时,出现的文档会显示我想要包含的每个提交(在我的示例中为FI(,而不会显示我不想要的任何提交。

这意味着从git log不显示的状态开始

A---B---C---D---E---F---G---H---I

因为如果是这样,git rebase-i a应该在其todo列表中显示从a到当前分支的所有提交(引用I(
在启动所述rebase之前,请确保您在正确的分支上。

相关内容

  • 没有找到相关文章