git:额外的项目“origin/HEAD”是什么意思

Cel*_*dor 32 git

在我朋友的建议下,我开始学习git。我阅读了手册(基础部分),我认为对提交、分支、设置向后、向前等最了解,但是当涉及到将本地存储库与远程存储库同步时,我感到有些失落。

我目前正在我的 `testrepository 上测试 git。我在本地添加文件和文件夹,然后通过添加其他文件使用网站更新存储库。然后我获取文件,合并提交并最终同步远程和本地存储库。现在,我有这个日志:

*   5cf86124752ed91bde703bca0133b904b356c430 (HEAD -> master, origin/master, origin/HEAD) Merge branch 'master' into HEAD
|\
| * 510cb404d9a7d062739da7960546187436941e8e Add folder_local1/{folde_local1_program1, folde_local1_program2, folde_local1_program3}
* | d7461473939ee6663535650fec08962b30865c6e Delete folder_server2_program4.java
* | 010aba572c7424e81446e151433805ec6d2d92ea Delete folder_server2_program3.java
* | a30e5a06923935edbcb362afb6cf5dc169ec5a61 Delete folder_server2_program2.java
* | 89dc387d36a0370844bf90bc028e9b335de2b0b5 Delete folder_server2_program1.java
* | f80348f8fa02960cd20f349a862b7a31700a0fdd Delete x
* | 12deed224204c2ef5ab60c92f39682628fb23ab1 Add files via upload
* | f00f6b3d4feecd00f1258f32456e4bb5e2b4af4b Create x
* | 0e7965394aa9d36a17fefb2b52c032627c1e8e28 Add files via upload
* | 7d594dcdcd4b169a0563f63070c8975a5ee1bc27 Add files via upload
* | c078101bae4a3413700242025f2db9c4aeb9b1d8 Add files via upload
* | 9dab1a30425e4fc57e57770deb475dea341ab136 Update folder_server1_program1.java
* | 41b6ecad4759fdadcda8955046582178693612ae Create folder_server1_program1.java
|/
*   be40ad56685d5f836b88de960feb2d7b881e6f93 Merge branch 'master' of github.com:FranekW/testrepository
|\
| * 2790ba683034812c83da1310993e6326f91da42d Create README.md
* | 9caf9163056ccfc0b06cdd28704dee912f1643b5 Add folder1/{folder1_program1, folder1_program2, folder1_program3}
|/
* 376fe054b95134d7953cfafe3b70931ff036fbb8 Initial commit
Run Code Online (Sandbox Code Playgroud)

所有的杉杉,origin/masterorigin/HEAD都为红色。其次,我不明白那里在origin/HEAD做什么?我虽然 HEAD 是指向我当前提交的指针。有人可以解释一下日志是否正常,或者我搞砸了太多。以及如何理解`origin/HEAD。

非常感谢

use*_*686 47

HEAD 有一些额外的用途。

由于 HEAD 是指向“当前”提交的指针,因此它也是您在克隆该存储库时默认获得的提交。因此,在远程存储库中,即使它们没有工作树,HEAD 仍然可以作为指向“默认”分支的指针存在——克隆将自动检出。

(例如,某些项目将“master”repo 的 HEAD 指向“dev”或“stable”分支而不是 master,以便人们在默认情况下获得更有用的东西。)


但是,在您的情况下,克隆,Git 保留<remote>/HEADref ,因为它还有另一个用途:它定义了分支 Git 工具将在仅指定远程名称时尝试。

例如,通常你不能这样做git log origin,因为 refs/remotes/origin/ 是一个目录,因此不能指向任何地方。然而,随后的Git自动寻找原点/ HEAD,让您无论分支点。

(这可以设置为git remote set-head origin ...您觉得方便的任何分支。)

  • @Celdor 很抱歉恢复一个死帖,但如果您将此答案标记为已接受,它将对社区有所帮助,因为它回答了您的问题。谢谢! (4认同)