HEAD 在 git 中是如何工作的

主要观点:作者进行 Mastodon 投票询问人们对 Git 中 HEAD 工作原理的理解程度,结果令人惊讶,人们对此不太自信,经过后续交流发现 HEAD 比想象中更复杂。
关键信息:

  • HEAD 有几个不同但密切相关的含义,包括.git/HEAD 文件、git show HEAD 中的 HEAD、git 各种命令输出中的 HEAD 等。
    -.git/HEAD 文件要么包含分支名(如 ref: refs/heads/main),要么包含提交 ID(如 96fa6899ea34697257e84865fefc56beb42d6390),决定当前分支。
  • 在 git 命令中,HEAD 常作为修订参数,如 git diff HEAD 等,git show HEAD 指当前检出的提交。
  • git status 输出中,“on branch main”表示.git/HEAD 包含分支,“HEAD detached at 90c81c72”表示.git/HEAD 包含提交 ID。
  • git log 输出中,(HEAD -> main)等表示当前分支等信息。
  • 合并冲突中,HEAD 在合并和 rebase 中的含义不同,易让人困惑,作者选择忽略 HEAD 以简化理解。
  • 作者认为 Git 中关于 HEAD 的术语不够一致,难以猜测相关概念。

重要细节:

  • 投票结果:10%“100%”,36%“pretty confident”,39%“somewhat confident?”,15%“literally no idea”。
  • 各种 git 命令中 HEAD 的具体用法及含义,如 git diff HEAD、git rebase -i HEAD^^^^ 等。
  • 处于 detached HEAD 状态的危险及脱离该状态的方法。
  • 合并冲突中“ours”和“theirs”的含义在合并和 rebase 中不同。
阅读 13
0 条评论