看标题真的。
假设我们已经在主干道上:
git branch -f master HEAD~和git reset HEAD~有什么区别?
据我所知,这两个命令都将分支/头指针移动到提交链中的一个上,但这两个命令之间还有其他区别吗?
发布于 2018-01-16 16:25:10
假设master是当前分支,git branch -f master HEAD~拒绝执行任何操作,并报告错误“致命:无法强制更新当前分支”。
如果您位于不同的分支上,则git branch -f master HEAD~将分支master移动到当前分支的第一个父级上,并且不影响当前分支、索引或工作树。
git reset HEAD~和git reset --mixed HEAD~是一样的。它在其第一个父节点上移动当前分支,更新索引以匹配分支的新位置,并且不影响工作树。
如您所见,这两个命令之间有许多不同之处。
请阅读git branch的文档。
备注:,如果git branch -f master HEAD~在master是当前分支时工作,其效果可能与git reset --soft HEAD~__相同。我们永远不会知道,因为这种形式的git branch拒绝更改当前签出的分支。
OP在一条评论中问道:“我也意识到混合是一个默认的重置,但也有软和硬,但我不知道的区别。”
设想情况:
git checkout masterfile1git add file1git commit在这一步骤之后:
git reset --soft HEAD~1只将master分支移动到上次提交之前的位置;它将回购带回到步骤3之后的状态;git reset --mixed HEAD~1移动分支并更新索引以匹配它;它将回购带到步骤2之后的状态;git reset --hard HEAD~1移动分支,然后更新索引和工作树以匹配它;它使回购回到步骤1之后的状态。当然,这是一个简化的解释,“将回购带到状态”部分只适用于这个简化的场景。如果您对不同的提交进行了git reset,那么只保留对分支、索引和工作树发生什么的解释,并在git reset命令的每个样式之后找出回购将是什么样子。
发布于 2022-11-23 16:58:00
git branch --force <branch> <commit>等于
git switch <branch> && git reset --hard <commit> && git switch -https://stackoverflow.com/questions/48285463
复制相似问题