git - 如何在不使用 reset 的情况下撤消 git 中的快进 merge

标签 git merge undo

想象一下这个场景:

master:            M
release-candidate:  \     A--B'--C'
feature-A:           \-A-/  /   /
feature-B:            \-B--/   /
feature-C:             \--C---/

候选版本是使用以下命令创建的:

git co master
git co -b release-candidate
git merge feature-A (FAST FORWARD)
git merge feature-B (REGULAR MERGE)
git merge feature-C (REGULAR MERGE)

假设在我们的预发布测试期间,我们发现了功能 A 的问题。我们如何撤消将此功能分支快速 merge 到发布候选分支所引入的更改?

我们可能会将候选版本重置回其主状态并再次开始 merge 所有有效功能,但这将意味着重复大量的 merge 冲突解决并引入错误的可能性。

另请注意,我只在每个功能分支上展示了一个提交,但解决方案应该适用于有多个提交要撤消的情况。

最佳答案

因为你不想重写已发布的历史,git revert 是你的 friend 。

在这种情况下:

git revert M..A -n
git commit -m "revert feature-A"

如果你想在一次提交中恢复,或者

git revert M..A

如果您想以相反的顺序对每个原始提交进行一次还原提交。

关于git - 如何在不使用 reset 的情况下撤消 git 中的快进 merge ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37118397/

相关文章:

javascript - 将 JSON 对象与 JSON 子对象合并

undo - 在 codemirror 中操作撤销状态

git - `git clone` 超过 "dumb"http 协议(protocol)因 `repository not found` 而失败

git - 同步到远程仓库时git push的问题

php - 我们如何将自托管的 git 存储库与 Composer 一起使用?

python - 在 Python 中合并数据框时出现重复的行

xcode - 工作副本 '<Project Name>' 无法提交文件 - 无法与助手应用程序通信

python - 使用附加条件合并两个数据框

ruby-on-rails - 在 Rails 中实现 gmail 样式 "undo"的最佳方法是什么?

svn - 有没有办法从意外的 "svn revert"中恢复?