在朋友的建议下,我开始学习git。我阅读了手册(基础部分),我认为理解了关于提交、分支、设置向后、向前等的大部分内容,但是当涉及到将本地存储库与远程存储库同步时,我感到有点迷茫。
我目前正在我的服务器上测试 git testrepository
。我在本地添加文件和文件夹,然后通过添加其他文件使用网站更新存储库。然后我获取文件、合并提交,并最终同步远程和本地存储库。现在,我得到了这个日志:
* 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
首先,origin/master
和origin/HEAD
都是红色的。其次,我不明白origin/HEAD
那里在做什么?我认为 HEAD 是一个指向我当前提交的指针。有人能解释一下日志是否正常,或者我是否搞错了太多吗?以及如何理解origin/HEAD
。
非常感谢
答案1
HEAD 还有一些其他用途。
由于 HEAD 是指向“当前”提交的指针,因此它也是克隆该存储库时默认获得的提交。因此在偏僻的存储库,即使它们没有工作树,HEAD 仍然可以作为指向“默认”分支的指针存在——克隆的分支将自动检出。
(例如,一些项目将“master” repo 的 HEAD 指向“dev”或“stable”分支而不是 master,以便人们默认获得更有用的东西。)
但就你的情况而言,后克隆时,Git 会保留<remote>/HEAD
引用,因为它有完后还有使用:它定义了如果仅指定远程名称,Git 工具将尝试的分支。
例如,通常你不能这样做git log origin
,因为 refs/remotes/origin/ 是一个目录,因此无法指向任何地方。但是,Git 会自动查找 origin/HEAD 并为您提供任何分支那指着。
(您可以使用git remote set-head origin ...
任何您认为方便的分支进行设置。)