由于合并但未给出 -m 选项,不允许撤销 git revert

7 浏览
0 Comments

由于合并但未给出 -m 选项,不允许撤销 git revert

我正在尝试使用“revert”命令返回到Git中的特定“哈希”编号。我正在使用以下命令:git revert c14609d74eec3ccebafc73fa875ec58445471765但是,我得到了以下返回:

错误:提交c14609d74eec3ccebafc73fa875ec58445471765是一个合并,但未提供-m选项。
致命错误:还原失败

发生了什么?应该如何解决这个问题?


当运行git log时,我想要恢复到这个特定的提交(c14609d74eec3ccebafc73fa875ec58445471765)。

0
0 Comments

在进行revert操作时,因为存在合并提交(merge commit),git无法确定要回滚到哪个父提交。使用-m选项可以指定要回滚到的父提交。可以通过git log命令查看父提交的信息,例如:

commit d02ee0f2179def10277f30c71c5d6f59ded3c595

Merge: dd3a24c 2462a52

然后运行以下命令:

git revert -m 1

其中1表示父提交编号为1(dd3a24c)。

如果要回滚到此提交,可以运行以下命令:

git reset --hard

从文档中了解git revert和git reset的区别,并决定使用哪个命令。git revert是更安全的选项,但并不能实现您想要的效果。它只是回滚某个(一组)提交的更改。git reset使您移动到历史记录中的特定提交,并且会重写您的历史记录。

manojlds,请提供您运行git log命令的完整命令。

如何确定哪个父提交是哪个?即如何确定要输入数字1还是2或其他数字?

我最初将dev分支合并到master分支。在回滚提交时,我使用了-m选项的值为1,这解决了问题。

我在https://blog.experteer.engineering/what-are-parents-on-git-merge-commits.html上找到了一个有用的答案,解释了如何确定哪个父提交是哪个。

0
0 Comments

问题出现的原因是因为使用了错误的命令git revert,该命令用于撤销指定提交中的更改,而不是撤销该提交之后的所有更改。所以需要使用git reset命令来实现撤销所有更改的操作。

解决方法是使用以下命令git reset --hard ,其中是要回退到的特定提交的哈希值。该命令将完全重置分支、索引和工作区到指定的提交状态。

需要注意的是,如果其他人已经fetch了较新的提交,使用此方法将从历史记录中删除这些提交,对他们来说会变得复杂。如果希望创建一个新的提交,将状态恢复到特定提交c14609d74eec3ccebafc73fa875ec58445471765的状态,可以使用git rm和git checkout命令:

git rm -r .

git checkout c14609d74eec3ccebafc73fa875ec58445471765 .

(需要使用rm命令确保新添加的文件也被删除)

然后可以在本地历史记录之上创建一个新的提交,该提交会撤销自c14609d74eec3ccebafc73fa875ec58445471765以来的所有更改。

0