git - 如何恢复从一个分支合并的所有提交
问题描述
例如,我有一个发布分支release/4.0.1
,我们用来将所有更改添加到此发布并将其合并到我们的QA
分支。我们做了几次提交并对我们的QA
分支进行了多次合并。现在,我们要删除所有QA
从release/4.0.1
. 还有其他在分支上完成的合并和提交。
最简单的方法是什么?仅恢复与该分支相关的更改和提交。
解决方案
让我们可视化您的场景:
o---o---o------o (some-other-branch)
\
o---o---o---M1---N---M2 (QA)
\ / /
A---B---C----D (release/4.0.1)
为了撤消QA
来自提交A
、和的更改B
,您需要还原合并提交和。C
D
M1
M2
首先,您需要找到在 fork 之后发生的合并QA
提交:release/4.0.1
git log --format='%h %s' --right-only --merges releases/4.0.1...QA
这将返回M1
,N
和M2
1的 ID 和提交消息。例如:
18abe3e Merge branch 'release/4.0.1'
2db6c39 Merge branch 'some-other-branch'
b49ea3f Merge branch 'release/4.0.1'
此时,您可以从最新release/4.0.1
的QA
开始恢复合并提交:
git switch QA
git revert -m 1 b49ea3f # Reverts M2
git revert -m 1 18abe3e # Reverts M1
或者,您可以在单个提交中还原所有合并提交:
git switch QA
git revert -m 1 --no-commit b49ea3f # Reverts M2
git revert -m 1 --no-commit 18abe3e # Reverts M1
# Verify that everything works
git commit -m "Revert merge commits M2 and M1"
提醒一句:恢复合并提交会删除更改,但不会改变分支的历史记录。如果您想再次合并,这会使事情变得release/4.0.1
复杂QA
。阅读文档以获取有关还原合并后果的更多信息。
- 不幸的是,不可能过滤掉其他分支中发生的合并提交。在这个例子中,
N
发生在M1
和之间M2
,所以它会成功。
推荐阅读
- firebase - Flutter Firestore 从 Geopoint 获取数组 >> “GeoPoint”实例 <<
- php - Laravel/PHPUnit 连接到 Docker 测试数据库
- java - Keycloak - 将客户端 IP 地址添加到 JWT 令牌的最佳/最简单方法?
- docker - 设计和架构解决方案以打破单一的“非基于 Web 的本地主机应用程序”
- root-framework - 如何在终端中绘制一个 TH1F 而不在 ROOT 中打开 TBrowser?
- typescript - Typescript泛型使用类构造函数,在工厂函数内扩展另一个具有静态属性的类
- django - Django:如何在同一个相关字段上制作多个过滤器?
- mysql - 联合所有查询的Mysql查询优化
- windows - 在powershell中设置对象的多个属性
- swift - 将按钮放在 PlayerLayer - Swift - 以编程方式