我一直在使用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
很长一段时间...
最佳答案
And as all we know, git reset --soft can reset the HEAD pointer.
确实如此,但那是偶然的。 git reset
允许您任意将当前分支移动到新的提交,然后检查该提交。 --soft
与 --hard
只是说如何处理工作目录和索引。
git checkout br1
git reset --soft br2
这会将 br1 移动到与 br2 相同的提交,同时保持工作目录和索引与 br1 相同。
关于git - 如何解释 git reset --soft && git checkout 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63986346/