如果您的分支develop
已发布并且您不想重写其历史记录(这将是最简单的方法),那么您确实可以恢复您的更改develop
,在. 沿线的东西:featureB
B
develop
#given history (top - newest)
#shaA3 <-- develop, HEAD
#shaB2
#shaA2
#shaB1
#shaA1
恢复:
git revert B2
git revert B1
现在历史包含:
#revert of shaB1 <-- develop, HEAD
#revert of shaB2
#shaA3
#shaB2
#shaA2
#shaB1
#shaA1
重新创建featureB
并重新播放还原的提交:
git checkout -b featureB
git rebase -i --onto develop shaB1~1 featureB
注释掉所有提交,除了那些属于功能 B 的提交(在我们的例子中)shaB1
并shaB2
完成变基。在这一点上,你应该有历史:
#shaB2' <-- featureB, HEAD
#shaB1'
#revert of shaB1 <-- develop
#revert of shaB2
#shaA3
#shaB2
#shaA2
#shaB1
#shaA1
要仔细检查一切是否顺利,您可以做git diff shaA3
- 应该为空,git diff develop
- 应该包含所有所需的 B 更改。
PS您当然可以使用cherry-pick或revert of reverts将b更改重播为branchB
,而不是rebase交互,例如在开发时:
git checkout -b branchB
git revert <revert of shaB1>
git revert <revert of shaB2>
会给你:
#revert of revert of shaB2 = shaB2' <-- featureB, HEAD
#revert of revert of shaB1 = shaB1'
#revert of shaB1 <-- develop
#revert of shaB2
#shaA3
#shaB2
#shaA2
#shaB1
#shaA1