真的看标题。
假设我们已经在主分支上:
git branch -f master HEAD~
和git reset HEAD~
之间有什么区别?
据我所知,这两个命令都将分支/ HEAD指针移动到提交链中,但是这两个指针之间是否存在其他值得注意的差异?
答案 0 :(得分:1)
假设master
是当前分支,git branch -f master HEAD~
拒绝执行任何操作并报告错误“致命:无法强制更新当前分支。”
如果您在不同的分支上,git branch -f master HEAD~
会在当前分支的第一个父分支上移动分支master
,并且不会影响当前分支,索引或工作树。
git reset HEAD~
与git reset --mixed HEAD~
相同。它将当前分支移动到其第一个父级,更新索引以匹配分支的新位置,并且不会影响工作树。
如果当git branch -f master HEAD~
是当前分支时master
有效,则其效果与git reset --soft HEAD~
相同。
如您所见,这两个命令之间存在许多差异。
OP在评论中提到:“我也知道混合是重置的默认值,但也有软和硬但我不知道差异。”
情景:
git checkout master
file1
git add file1
git commit
完成此步骤后:
git reset --soft HEAD~1
仅移动最后一次提交之前的master
分支;它使回购回到了第3步之后的状态; git reset --mixed HEAD~1
移动分支并更新索引以匹配它;它将回购带到了第2步之后的状态; git reset --hard HEAD~1
移动分支然后更新索引和工作树以匹配它;它将回购带到了第1步之后的状态。当然,这是一个简化的解释,“将回购带到状态”部分仅适用于此简化方案。如果你git reset
进行不同的提交,那么只保留关于分支,索引和工作树会发生什么的解释,并弄清楚在git reset
命令的每种风格之后repo的样子。