git-reset hash
définit la référence de branche au hachage donné et, facultativement, la vérifie, avec --hard
.
git-checkout hash
définit l'arbre de travail sur le hachage donné; et à moins que hash soit un nom de branche, vous finirez avec une tête détachée.
en fin de compte, offres de git avec 3 choses:
working tree (your code)
-------------------------------------------------------------------------
index/staging-area
-------------------------------------------------------------------------
repository (bunch of commits, trees, branch names, etc)
git-checkout
par défaut mises à jour juste l'index et l'arbre de travail, et peut le cas échéant mettre à jour quelque chose dans le référentiel (avec l'option -b
)
git-reset
Par défaut, met à jour le référentiel et l'index, et éventuellement l'arbre de travail (avec l'option --hard
)
Vous pouvez penser au référentiel comme ceci:
HEAD -> master
refs:
master -> sha_of_commit_X
dev -> sha_of_commit_Y
objects: (addressed by sha1)
sha_of_commit_X, sha_of_commit_Y, sha_of_commit_Z, sha_of_commit_A ....
git-reset
manipule ce que les références de la branche pointent.
Supposons que votre histoire ressemble à ceci:
T--S--R--Q [master][dev]
/
A--B--C--D--E--F--G [topic1]
\
Z--Y--X--W [topic2][topic3]
Gardez à l'esprit que les succursales ne sont que des noms qui avance automatiquement lorsque vous vous engagez.
Vous avez donc les branches suivantes:
master -> Q
dev -> Q
topic1 -> G
topic2 -> W
topic3 -> W
Et votre branche actuelle est topic2
, à savoir les points de la tête aux sujet2.
HEAD -> topic2
Ensuite, git reset X
réinitialisera le nom topic2
pour pointer vers X; ce qui signifie que si vous faites un commit P sur topic2 branche, les choses vont ressembler à ceci:
T--S--R--Q [master][dev]
/
A--B--C--D--E--F--G [topic1]
\
Z--Y--X--W [topic3]
\
P [topic2]
J'ai couvert cela dans une mise à jour à ma réponse à l'une de vos questions précédentes - regardez l'art ascii près du sommet, en particulier où il dit "Digression: ..." (autant que j'aurais aimé plus de rep pour le re-répondre ici) – Cascabel
Je pense que vous pouvez poster votre réponse ici et obtenir un représentant. Si quelqu'un recherche cette connaissance particulière, il ne trouvera pas l'autre message. Celui-ci vise un sujet très spécifique, et il mérite d'avoir sa page séparée. BTW, il semble que vous êtes mon mentor Git :-) harigato, senseï! –
Mais est-ce que je l'obtiens, la différence est que la réinitialisation déplace la branche et non la caisse. –