git reset HEAD~1与git branch -f mainline HEAD~1的区别及选用建议
Git分支回退命令选择:reset vs branch -f
场景说明
假设当前分支为
mainline,mainline与HEAD指针均指向最新提交。现有两条命令:git reset HEAD~1 git branch -f mainline HEAD~1疑问:这两条命令是否都会让
mainline和HEAD一同指向之前的提交?应该选哪条?原因是什么?
编辑补充:使用git branch -f mainline HEAD~1时,当前分支不能是mainline。
命令差异与选择建议
1. git reset HEAD~1(当前分支为mainline时可用)
这条命令直接针对当前分支操作——因为当前分支就是mainline,执行后会把mainline的指针移到HEAD~1(上一个提交),而HEAD本来就附着在mainline上,自然也会跟着移动到旧提交。默认采用--mixed模式,会清空暂存区但保留工作区的修改。如果你的需求就是让当前所在的mainline回退一个版本,这条命令是直接且正确的选择。
2. git branch -f mainline HEAD~1
这条命令是强制修改指定分支的指针位置,把mainline拉到HEAD~1,但有硬性限制:当前分支不能是mainline,否则会报错。而且执行后HEAD不会有任何变化——因为HEAD附着在你当前所在的分支上,只要当前分支不是mainline,HEAD就会停留在当前分支的提交上,只有mainline被移到旧提交。
结论
- 如果当前分支就是
mainline,只能用git reset HEAD~1,另一条命令会直接报错; - 如果当前分支不是
mainline,但需要把mainline回退到上一个提交,同时保持当前分支和HEAD不动,就用git branch -f mainline HEAD~1。
内容的提问来源于stack exchange,提问作者Prakarsh Pathak
相关产品推荐
相关产品推荐

