git-reset hash
setzt die Verzweigungsreferenz auf den gegebenen Hash und prüft sie optional mit --hard
.
git-checkout hash
setzt den Arbeitsbaum auf den gegebenen Hash; und wenn Hash kein Name eines Zweiges ist, haben Sie am Ende einen unzusammenhängenden Kopf.
schließlich git beschäftigt sich mit 3 Dinge:
working tree (your code)
-------------------------------------------------------------------------
index/staging-area
-------------------------------------------------------------------------
repository (bunch of commits, trees, branch names, etc)
git-checkout
standardmäßig aktualisiert nur den Index und die Arbeitsstruktur und kann optional etwas im Repository aktualisieren (mit -b
Option)
git-reset
Standardmäßig aktualisiert nur das Repository und der Index und optional die funktionierende Struktur (mit der --hard
Option)
Sie können sich das Repository vorstellen dies wie:
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
manipuliert, was die Zweig Referenzen verweisen auf.
Angenommen, Ihre Geschichte sieht wie folgt aus:
T--S--R--Q [master][dev]
/
A--B--C--D--E--F--G [topic1]
\
Z--Y--X--W [topic2][topic3]
Beachten Sie, dass Zweige nur Namen sind, die vorher automatisch, wenn Sie zu begehen.
So haben Sie die folgenden Zweige:
master -> Q
dev -> Q
topic1 -> G
topic2 -> W
topic3 -> W
Und Ihre aktuellen Zweig ist topic2
, das heißt, die HEAD zeigt auf Thema2.
HEAD -> topic2
Dann wird git reset X
setzen Sie den Namen topic2
auf X zu zeigen; das heißt, wenn Sie ein P auf Zweig Thema2 begehen machen, wird es wie folgt aussehen:
T--S--R--Q [master][dev]
/
A--B--C--D--E--F--G [topic1]
\
Z--Y--X--W [topic3]
\
P [topic2]
ich dies Ihrer früheren Fragen zu einer meiner Antwort in einem Update abgedeckt - Blick auf die ascii Kunst in der Nähe der Spitze, vor allem, wenn es heißt "Exkurs: ..." (so sehr, wie ich mehr Repräsentant dafür würde, es hier wieder zu beantworten) – Cascabel
Ich denke, dass Sie Ihre Antwort hier posten können und Rep von ihm gewinnen können. Wenn jemand nach diesem bestimmten Wissen sucht, wird er den anderen Beitrag nicht finden. Dieses eine Ziel ist ein sehr spezifisches Thema, und es verdient, seine eigene Seite zu haben. Übrigens, du scheinst mein Git-Mentor zu sein :-) harigato, senseï! –
Aber ich bekomme es, der Unterschied ist, dass Reset den Zweig bewegt und nicht auscheckt. –