是否可以选择在交互式基础库中还原提交?

问题描述

我们的git分支管道是

dev -> test -> uat -> master

其中testuatmaster是受保护的分支。

我在合并之前完成了一些错误的合并。我想还原它们。我尝试使用rebase而不是restore,因为我无法在n上找到HEAD~{n},直到可以还原所有提交和合并。

git revert HEAD~n

因此,我尝试进行重做。我找到了对发展的良好承诺,直到一切正常。我用过

git rebase -i good_commit_sha

我看到所有提交的列表(大多数是错误的),我将所有提交都删除了,然后选择2个是好的。但是,当我看到合并请求时,我只会(自然地)看到我选择的请求。因此,我意识到我想还原而不是删除。有可能吗?

我知道这不是一个好习惯,但可以接受建议,我确实认为这是一种常见的情况。

解决方法

我在合并之前完成了一些错误的合并。我想还原它们。 我尝试使用rebase而不是restore,因为我找不到 n中的HEAD~{n},直到我可以还原所有提交和合并。

git revert HEAD~n

这是您的实际问题,我们将尝试为此提供解决方案。

要在合并后恢复git,您必须指定一些选项,如docs中所述和this answer中所述。您必须指定要恢复到的合并的一侧,否则该语句将变得模棱两可。莱纳斯本人的tutorial应该会有所帮助。

您的语法应为以下内容:

git revert -m 1 <SHA of the commit to revert to>

请记住,-m从1开始计数,您可能想在本地进行一些运行,然后提交并推动“好”的运行。

,

一个值得记住的好短语:Rebase locally,merge remotely

表示只要尚未推送,就可以随意使用(交互式)变基并修复您需要的所有内容。这可能涉及删除提交,压缩提交,无论如何有助于理解提交历史。

一旦被推送,您就应该使用merge,因为否则您将不得不稍后强制推送您的基础变更,您应该避免使用,因为有人可能已经检查了您要变更的内容(交谈关于提交历史)。

话虽这么说,您的做法是一种可能性。稍后恢复错误的提交是您可以采取的另一种方法。
期望错误的提交已经在您的远程上,后一种方法应该是首选。

,

我设法从另一个问题上找到了答案。 (查找链接)

git reset --hard good_ocmmit_sha

HEAD现在处于good_ocmmit_sha修复单元测试中

git reset --soft @{1}

git commit -m "Reverted to stable"

[revert_branch]恢复为稳定

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...