46 votes

git : Que signifie un élément supplémentaire "origin/HEAD" ?

Suivant les conseils d'un de mes amis, j'ai commencé à apprendre git . J'ai lu le manuel (sections de base) et je pense avoir compris la plupart des choses concernant commits, les branches, le réglage en arrière, en avant, etc. mais quand il s'agit de synchroniser le dépôt local avec le dépôt distant, je me sens légèrement perdu.

Je suis en train de tester git sur mon `testrepository'. J'ajoutais des fichiers et des dossiers localement, puis je mettais à jour un dépôt en utilisant le site web en ajoutant des fichiers supplémentaires. Puis j'ai récupéré des fichiers, fusionné des commits et finalement j'ai synchronisé les dépôts locaux et distants. Maintenant, j'ai ce journal :

*   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

Tout d'abord, origin/master y origin/HEAD sont tous deux en rouge. Deuxièmement, je ne comprends pas ce qu'est origin/HEAD fait là-bas ? Je pense que HEAD est un pointeur qui pointe vers mon commit actuel. Quelqu'un pourrait-il m'expliquer si le log est correct ou si je me suis trop trompé. Et aussi comment comprendre `origin/HEAD.

Merci beaucoup.

64voto

James Mertz Points 390

HEAD a quelques utilisations supplémentaires.

En raison du fait que HEAD est un pointeur vers le commit "actuel", c'est aussi le commit que vous obtenez par défaut lorsque vous clonez ce dépôt. Ainsi, dans à distance même s'ils n'ont pas d'arbre de travail, HEAD peut toujours exister comme un pointeur vers la branche "par défaut" - celle que les clones extrairont automatiquement.

(Par exemple, certains projets dirigent HEAD du repo "master" vers une branche "dev" ou "stable" au lieu de master, afin que les gens obtiennent quelque chose de plus utile par défaut).


Dans votre cas cependant, après clonage, Git conserve le <remote>/HEAD ref autour parce qu'il a encore une fois use : il définit la branche que les outils Git essaieront si seul le nom distant est spécifié.

Par exemple, normalement, vous ne pourriez pas faire git log origin puisque refs/remotes/origin/ est un répertoire, et ne peut donc pas pointer n'importe où. Cependant, Git recherche automatiquement origin/HEAD et vous donne la branche que vous souhaitez que pointe vers.

(Ceci peut être réglé en utilisant git remote set-head origin ... à la branche qui vous convient).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X