git checkout my_branch 与 git checkout origin/my_branch

标签 git

当我像这样检查 branch2 时,我在 branch1 上(两个分支都存在)。

git checkout origin/branch2

然后我得到一个分离的头错误:

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

但是我只是检查 branch2(没有 origin)然后它工作正常:

git checkout branch2

那么 git checkout 有和没有 origin/ 有什么区别?为什么在使用 origin/ 时出现 detached HEAD 错误?

最佳答案

“detached HEAD”消息是警告,不是错误。

原因很简单。 Git 有两种关于分支的状态:

  • 在分支机构,或
  • 不在分支机构。

当您在分支上进行新提交时,分支会自动前进以包含新提交。

当您在一个分支上并进行新的提交时,非分支也会前进,但是——这是警告的原因——如果你随后切换到其他分支(这样你在上面),git 忘记你在哪里1 当你在一个分支上时,分支名称会记住新的提交;当你不在时,就没有什么可以记住它们了。

你不能在远程跟踪分支上

分支 origin/branch2 是一个远程跟踪分支:也就是说,一个分支会记住“branch2 上的位置” >origin 上次我们(我们的 git 和 origin 的 git)讨论了分支”。因为这样做的目的是跟踪他们在哪里,git不会让你“进入”那个分支并进行新的提交(然后它会记住在哪里而不是他们所在的地方)。

因为你不能在上面,所以检查它会给你“分离的 HEAD”状态。

但是你可以在普通的(本地)分支上

分支 branch2 是一个普通的本地分支。随心所欲。您可以开始并做出新的 promise 。

(您的本地分支也可以记住远程跟踪分支,作为其所谓的上游。Gi​​t 对此的混淆术语是您的本地分支然后“跟踪”远程跟踪分支."tracking"这个词在这里出现的次数太多了,"branch"这个词也出现了太多次,都是不同的含义。)


1实际上它会保存一段时间,在 HEADreflog 中,但默认情况下只能保存 30 天。

关于git checkout my_branch 与 git checkout origin/my_branch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35145400/

相关文章:

git - 终端无法识别 $ 命令

xcode - Git 不会忽略 .gitignore 中的某些 Xcode 文件

git - Visual Studio /GIT : No tracked remote branch

git - 将来自多个存储库的 Git 提交与 TFS 2013 构建相关联

Gitlab:无法创建 ssh key

git - 是否可以在 Git 中签署 merge 提交?

git - DOWNLOAD_SOURCE 阶段的 AWS Codebuild 错误

windows - 如何将 GIT 调用的输出放入批处理脚本中的变量中?

Git 流程 - 从另一个功能分支创建功能分支

git - 推送 merge 冲突分支