“git branch-f master HEAD~”和“git reset HEAD~”之间有什么区别?
看标题真的 假设我们已经在主分支上:“git branch-f master HEAD~”和“git reset HEAD~”之间有什么区别?,git,version-control,git-branch,git-checkout,Git,Version Control,Git Branch,Git Checkout,看标题真的 假设我们已经在主分支上: git分支-f主磁头和git重置磁头之间有什么区别 据我所知,这两个命令都将分支/头指针在提交链中向上移动了一个,但是这两个命令之间还有什么值得注意的区别吗?假设master是当前分支,git branch-f master HEAD拒绝执行任何操作并报告错误“致命:无法强制更新当前分支。” 如果您在另一个分支上,git branch-f master HEAD ~在当前分支的第一个父级上移动分支master,并且不会影响当前分支、索引或工作树 git re
git分支-f主磁头
和git重置磁头
之间有什么区别
据我所知,这两个命令都将分支/头指针在提交链中向上移动了一个,但是这两个命令之间还有什么值得注意的区别吗?假设
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在评论中问道:“我也知道mixed是重置的默认值,但也有软的和硬的,但我不知道它们之间的区别。” 情景:
git签出主机
file1
git添加文件1
git提交
仅移动上次提交之前的git reset--soft HEAD~1
分支;它将回购恢复到步骤3之后的状态master
移动分支并更新索引以匹配它;它将回购带到步骤2之后的状态git reset--mixed HEAD~1
移动分支,然后更新索引和工作树以匹配它;它使回购恢复到步骤1之后的状态git reset--hard HEAD~1
当然,这只是一个简单的解释,“将回购协议带到州政府”“部分仅适用于此简化方案。如果您
git reset
到一个不同的提交,那么只保留关于分支、索引和工作树发生了什么的解释,并计算出在每次执行命令之后,repo会是什么样子。在第一种情况下,您将保持在当前分支上,在第二天,您将切换到master
。假设我们已经在master上。编辑OP以澄清。致命:无法强制更新当前分支。
致命:无法强制更新当前分支。
它将当前分支移动到其第一个父级,更新索引以匹配分支的新位置,并且不影响工作树。
我不明白这意味着什么。更新索引但不是工作树?我也知道,mixed
是重置的默认值,但也有soft
和hard
,但我不知道它们的区别。因此branch
有一个隐式soft
,而reset
有隐式mixed
?@user9225276没有soft
在git分支上
。你问有什么区别git reset--soft
只移动分支,不影响索引和工作树git checkout-f
也只移动分支,不影响索引和工作树。这就是他们相似之处的终结git reset
对当前分支进行操作git分支-f
拒绝在当前分支上工作。而且git分支
没有soft/hard/mixed
。了解和了解。他们做不同的事情。