如何从master切出回退到指定commit的新分支,修改后提交PR
问题解答
1. 能否正常创建PR
可以正常创建PR,所有主流Git托管平台(GitHub、GitLab、Gitee等)均支持从任意已推送的远程分支向master分支发起拉取请求,没有分支提交链的限制。
2. PR合并后的master提交链形态
最终提交链结构取决于你选择的PR合并模式:
- 若选择压缩合并(Squash Merge)或变基合并(Rebase Merge):合并后master的提交链确实会变为
A-B-C-D-E-X,D、E的提交会完整保留在master历史中,你的改动会作为新的提交X接在E之后。 - 若选择默认普通合并(No Fast Forward Merge):会额外生成一个合并提交M,最终提交链为
A-B-C-D-E-M,M的两个父提交分别是E和X,D、E以及C-X的提交链都会保留在历史中。
无论选哪种合并模式,合并后master的最终代码内容都会是你修改后的X版本,相当于丢弃了D、E两个提交的代码改动。
3. 操作可行性
这个操作可以达到你要的“让master代码回到修改后的C版本”的效果,是可行的。但需要注意一个隐患:因为你是直接基于C切分支修改,而不是通过git revert命令撤销D、E的改动,如果后续你需要重新合入D、E的改动,Git可能无法自动识别历史冲突,需要手动处理。
如果想要提交历史更清晰规范,更推荐的做法是直接在master上执行git revert <D的提交哈希> <E的提交哈希>,生成两个明确的回退提交,既能达到代码回退的效果,也不会影响后续旧改动的合入。
内容的提问来源于stack exchange,提问作者BobbKitty729
相关产品推荐
相关产品推荐

