如何在git中撤销多个已推送到远程服务器的提交?

6ljaweal  于 2022-11-20  发布在  Git
关注(0)|答案(1)|浏览(252)

我不知道如何修复提交不应该合并到master分支的情况。我不太精通git,主要是使用Visual Studio的控件。
不久前,我把一堆特性分支合并到develop分支中。但是,我还不应该这么做。最近,应用程序中的一个bug需要修复。所以,我把develop分支出来,修复了它,然后合并回develop。然后,我把develop合并到master中,这样我就可以发布bug修复了。
做完这些之后,我意识到我忘记了那些还没有发布的特性分支,现在它们和bug修复沿着在master中。大约有200个提交需要恢复,所以我不想一个一个地做。一旦我恢复了它们,我最终也需要撤销恢复,这样我才能发布这些特性。
我第一次尝试通过Reset > Delete Changes (--hard)来撤销特定提交之前的更改,但是由于更改被推送到远程存储库,因此它们只是作为传入的更改重新出现。
然后,我查找revert multiple commits的路径,并尝试恢复范围:

git revert --no-edit <first_bad_commit-id>..<last_bad_commit-id>

但我得到的错误:

error: commit xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx is a merge but no -m option was given.
fatal: revert failed

找到了关于-m是什么以及如何使用它的this post,但是无论我读到哪里,我都不能理解如何使用-m,为什么我不能恢复合并。这可能是因为我与git命令行的交互很少。
因此,我有一个包含200个不需要的提交的范围,它们夹在我需要的提交之间。我如何撤销这200个提交?
我也很满意一个解决方案,撤销所有最新的提交,直到一个特定的提交。这将是快速重新添加代码的错误修复。

eyh26e7m

eyh26e7m1#

提交 是 连续 的 吗 ? 如果 是 , 你 可以 尝试 使用 hackernoon 网站 上@timmouskhelichvili 描述 的 方法 :https://hackernoon.com/how-to-delete-commits-from-remote-in-git , 在 这里 你 将 head 重置 回 一 个 或 多 个 commit , 也 就是 :git reset - - hard HEAD~x ( 用于 x 个 连续 的 提交 , 可以 根据 要 删除 的 提交 数量 进行 更改 ) 。
否则 , 您 可以 使用 我 使用 的 方法 , 删除 特定 哈希 值 之前 的 提交 :git reset - - hard [ hash _ value ] ( 哈希 值 可以 在 远程 仓库 或 本地 git 日志 中 找到 ) 。
如果 提交 不 连续 :您 将 需要 使用 交互 式 rebase , 但 我 还 没有 使用 它 , 建议 您 查看 https://hackernoon.com/how-to-delete-commits-from-remote-in-git 以 获得 更 好 的 解释 。

相关问题