误在Git本地main分支修改,如何迁移改动并重置main分支?
问题解答
1. 第一组命令的有效性
你已经提前创建了new-branch,所以命令中的git checkout -b new-branch会报错(Git不允许重复创建同名分支,除非添加-B参数强制覆盖)。去掉这步冗余操作后,剩下的命令:
git checkout main git reset --soft <sha1_for-D>
完全可以达到你的目标:将本地main分支重置到提交D,同时new-branch会保留所有本地修改(因为它的指针仍指向提交E'),最终提交结构和你期望的一致。
如果忽略git checkout -b new-branch的报错问题(比如你还未创建分支时执行),整组命令执行成功后确实能实现需求,但在你已经创建new-branch的场景下这步完全多余。
2. 两组命令是否等效
完全不等效。
- 第一组命令最后执行了
git reset --soft <sha1_for-D>,会将main分支的指针移动到提交D,完成分支状态的恢复。 - 第二组命令仅完成了「切换到
main→创建new-branch并切换过去→切回main」的操作,没有对main分支做任何重置,main仍然停留在提交E的位置,完全没达到你恢复main到D的需求。
3. 对后续合并的影响
此次--soft重置不会影响后续合并过程。git reset --soft只是移动了main分支的指针,并没有修改任何提交的内容或历史。new-branch的提交E'是基于D的,当你后续将new-branch合并回main时,Git会识别出E'是D的直接后续,可执行快速合并(fast-forward)或普通合并,整个过程和正常分支合并没有区别。
内容的提问来源于stack exchange,提问作者Cbhihe
相关产品推荐
相关产品推荐

