看标题真的。假设我们已经在master分支上:git branch -f master HEAD~和git reset HEAD~之间有什么区别?就我所知,这两个命令都将分支/HEAD指针在提交链中向上移动一个,但是这两个命令之间还有其他值得注意的区别吗?
git branch -f master HEAD~
git reset HEAD~
c9qzyr3d1#
假设master是当前分支,git branch -f master HEAD~拒绝执行任何操作并报告错误 “fatal:无法强制更新当前分支。"如果您在不同的分支上,git branch -f master HEAD~会将分支master移动到当前分支的第一个父分支上,而不会影响当前分支、索引或工作树。git reset HEAD~与git reset --mixed HEAD~相同。它将当前分支移动到其第一个父级上,更新索引以匹配分支的新位置,并且不影响工作树。正如您所看到的,这两个命令之间有许多不同之处。请阅读git branch的文档。
master
git reset --mixed HEAD~
git branch
**备注:**如果git branch -f master HEAD~在master为当前分支时有效,其效果可能与git reset --soft HEAD~相同.我们永远不会知道,因为git branch得这种形式拒绝更改当前 checkout 得分支.
git reset --soft HEAD~
楼主在评论中问道:* “我也知道混合是重置的默认设置,但也有软重置和硬重置,但我不知道它们的区别。"*场景:
git checkout master
file1
git add file1
git commit
git reset --soft HEAD~1
git reset --mixed HEAD~1
git reset --hard HEAD~1
当然,这只是一个简单的解释,“使repo进入状态”这部分只适用于这个简单的场景。如果你git reset到一个不同的提交,那么只保留关于分支,索引和工作树发生了什么的解释,并弄清楚在git reset命令的每一种风格之后repo会是什么样子。
git reset
kxe2p93d2#
git branch --force <branch> <commit>
相当于
git switch <branch> && git reset --hard <commit> && git switch -
2条答案
按热度按时间c9qzyr3d1#
假设
master
是当前分支,git branch -f master HEAD~
拒绝执行任何操作并报告错误 “fatal:无法强制更新当前分支。"如果您在不同的分支上,
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
得这种形式拒绝更改当前 checkout 得分支.楼主在评论中问道:* “我也知道混合是重置的默认设置,但也有软重置和硬重置,但我不知道它们的区别。"*
场景:
git checkout master
个1.修改
file1
git add file1
git commit
经过此步骤:
git reset --soft HEAD~1
仅将master
分支移动到其在最后提交之前所在的位置;它将REPO带回到它在步骤3之后的状态;git reset --mixed HEAD~1
移动分支并更新索引以匹配它;它将REPO带到步骤2之后的状态;git reset --hard HEAD~1
移动分支,然后更新索引和工作树以匹配它;它将REPO带到步骤1之后的状态。当然,这只是一个简单的解释,“使repo进入状态”这部分只适用于这个简单的场景。如果你
git reset
到一个不同的提交,那么只保留关于分支,索引和工作树发生了什么的解释,并弄清楚在git reset
命令的每一种风格之后repo会是什么样子。kxe2p93d2#
相当于