“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
      仅移动上次提交之前的
      master
      分支;它将回购恢复到步骤3之后的状态
    • git reset--mixed HEAD~1
      移动分支并更新索引以匹配它;它将回购带到步骤2之后的状态
    • git reset--hard HEAD~1
      移动分支,然后更新索引和工作树以匹配它;它使回购恢复到步骤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
    。了解和了解。他们做不同的事情。