首页 > 解决方案 > 如何解释 git reset --soft && git checkout 的行为

问题描述

我已经使用git了一年,我可以使用常见的 git 命令,例如git add, git commit, git reset,git checkoutgit rebase

今天,我发现了一些git checkout我无法解释的事情。

众所周知,git checkout <branchname>可以切换到<branchname>. 据我了解,此命令执行以下操作:

总之,这个命令做了三个步骤,以便它可以切换分支。

众所周知,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 checkoutgit reset有点奇怪,我想我可能对命令误解git checkout了很久......

标签: git

解决方案


众所周知, git reset --soft 可以重置 HEAD 指针。

没错,但那是偶然的。git reset允许您任意将当前分支移动到新的提交,然后检查该提交。--softvs--hard只是说如何处理工作目录和索引。

git checkout br1
git reset --soft br2

这会将 br1 移动到与 br2 相同的提交,同时保持您的工作目录和索引与 br1 相同。


推荐阅读