git - 如何解释 git reset --soft && git checkout 的行为
问题描述
我已经使用git
了一年,我可以使用常见的 git 命令,例如git add
, git commit
, git reset
,git checkout
等git rebase
。
今天,我发现了一些git checkout
我无法解释的事情。
众所周知,git checkout <branchname>
可以切换到<branchname>
. 据我了解,此命令执行以下操作:
- 切换分支指针
- 更新
HEAD
指针 - 更新工作区和索引
总之,这个命令做了三个步骤,以便它可以切换分支。
众所周知,git reset --soft
可以重置HEAD
指针。
现在让我向你展示一些对我来说“奇怪”的东西。
git checkout br1
git reset --soft br2
git checkout br2
根据我对git checkout
上面的理解,我认为这git reset --soft br2
是胡说八道,这意味着在我个人看来,这三个命令相当于git checkout br1 && git checkout br2
.
但是执行完这三个命令后,发现最后一次提交br1
被带到了分支br2
,也就是说最后一次提交br1
已经被复制到了当前工作区和当前索引。
嗯,我现在很困惑。我突然觉得命令git checkout
和git reset
有点奇怪,我想我可能对命令误解git checkout
了很久......
解决方案
众所周知, git reset --soft 可以重置 HEAD 指针。
没错,但那是偶然的。git reset
允许您任意将当前分支移动到新的提交,然后检查该提交。--soft
vs--hard
只是说如何处理工作目录和索引。
git checkout br1
git reset --soft br2
这会将 br1 移动到与 br2 相同的提交,同时保持您的工作目录和索引与 br1 相同。
推荐阅读
- javascript - 在 Alfresco Share 中的 bundle service *.post.js 文件中,companyhome 未定义错误
- r - 计算一段时间后的累积和
- javascript - 如何配置 Vue-CLI 3 以生成没有 JavaScript 的页面?
- python - 具有多个条件和检索值的 Pandas df.loc 索引
- sql - 是否可以基于另一个表生成列?
- python - 为什么 Python 在列表理解中不排除错误
- php - 尝试在 null 上读取属性“total_product_quantity”
- mongodb - Mongo DB 存档无法从 ec2 与 vpc 对等互连
- django - 无法解析相关模型。姜戈,左塞尔
- .net - 使用 Directory.Build.Prop 为 .NET Framework 添加包