git - 如何解释 git reset --soft && git checkout 的行为

标签 git

我一直在使用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 checkoutgit 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/

相关文章:

windows - 在 Windows 下使用 GIT with/SSH key 文件的问题

git - 我如何知道 git 存储库的深度?

windows - 无效的公共(public) ssh key

git - git对 "git reset --har"做了什么命令

ios - 由于 Xcode 错误导致的 pod 规范 lint 验证错误

Github 推送到私有(private)仓库,未找到错误

bash - git !alias 可以在 bash 和 Powershell 中使用

windows - 如何在 Windows 上使用 git+mintty+mingw 获得彩色输出?

git:列出一天(或一周/一个月......)添加/修改的所有文件

Git merge 方向错误?