由于合并但未给出 -m 选项,不允许撤销 git revert 。
由于合并但未给出 -m 选项,不允许撤销 git revert 。
我正在尝试使用“revert”命令返回到Git中的特定“哈希”编号。我正在使用以下命令:git revert c14609d74eec3ccebafc73fa875ec58445471765
但是,我得到了以下返回:
错误:提交c14609d74eec3ccebafc73fa875ec58445471765是一个合并,但未提供-m选项。
致命错误:还原失败
发生了什么?应该如何解决这个问题?
当运行git log
时,我想要恢复到这个特定的提交(c14609d74eec3ccebafc73fa875ec58445471765
)。
在进行revert操作时,因为存在合并提交(merge commit),git无法确定要回滚到哪个父提交。使用-m选项可以指定要回滚到的父提交。可以通过git log命令查看父提交的信息,例如:
commit d02ee0f2179def10277f30c71c5d6f59ded3c595
Merge: dd3a24c 2462a52
然后运行以下命令:
git revert
其中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上找到了一个有用的答案,解释了如何确定哪个父提交是哪个。
问题出现的原因是因为使用了错误的命令git revert,该命令用于撤销指定提交中的更改,而不是撤销该提交之后的所有更改。所以需要使用git reset命令来实现撤销所有更改的操作。
解决方法是使用以下命令git reset --hard
需要注意的是,如果其他人已经fetch了较新的提交,使用此方法将从历史记录中删除这些提交,对他们来说会变得复杂。如果希望创建一个新的提交,将状态恢复到特定提交c14609d74eec3ccebafc73fa875ec58445471765的状态,可以使用git rm和git checkout命令:
git rm -r .
git checkout c14609d74eec3ccebafc73fa875ec58445471765 .
(需要使用rm命令确保新添加的文件也被删除)
然后可以在本地历史记录之上创建一个新的提交,该提交会撤销自c14609d74eec3ccebafc73fa875ec58445471765以来的所有更改。