use*_*276 5 git version-control git-checkout git-branch
看标题确实。
假设我们已经在 master 分支上:
git branch -f master HEAD~
和之间有什么区别git reset HEAD~
?
据我所知,这两个命令都将分支/HEAD 指针在提交链中向上移动,但是这两个命令之间还有其他值得注意的区别吗?
假设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 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
。
归档时间: |
|
查看次数: |
1143 次 |
最近记录: |