首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“`git分支-f主头”和“`git重置头”之间的区别是什么?

“`git分支-f主头”和“`git重置头”之间的区别是什么?
EN

Stack Overflow用户
提问于 2018-01-16 16:10:33
回答 2查看 853关注 0票数 4

看标题真的。

假设我们已经在主干道上:

git branch -f master HEAD~git reset HEAD~有什么区别?

据我所知,这两个命令都将分支/头指针移动到提交链中的一个上,但这两个命令之间还有其他区别吗?

EN

Stack Overflow用户

回答已采纳

发布于 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在一条评论中问道:“我也意识到混合是一个默认的重置,但也有软和硬,但我不知道的区别。”

设想情况:

  1. git checkout master
  2. 修改file1
  3. git add file1
  4. 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命令的每个样式之后找出回购将是什么样子。

票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48285463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档