Was ist der Unterschied zwischen `git reset --hard master` und `git reset --hard origin/master"?
Habe ich versucht, eine Menge von links auf Stackoverflow/anderswo richtig verstehen, Verhalten
git reset --hard option
Ich weiß, dass:
- Wenn es weggelassen wird, oder wenn es
origin
, reset erfolgt am letzten commit auforigin
- Wenn ein SHA1-hash ist vorhanden, reset ist erfolgt, die auf die entsprechenden Begehen.
Was ich nicht verstehe, sind die folgenden Werte:
origin
HEAD
origin/master
origin/branch
Alles zu haben scheinen, die gleiche Verhalten, d.h. Sie einen Punkt, um neueste commit auf master
.
Bitte erklären, was ist die Bedeutung aller 4-value-option, die oben bereitgestellt.
Ich würde auch gerne wissen, wenn ich auf einen bestimmten Zweig, wie kann ich das zurücksetzen auf das Letzte commit auf, dass sehr Zweig?
Wenn ich z.B. bin auf v1.2
, origin/v1.2
noch nimmt mich an die Letzte commit auf master
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zunächst einmal müssen Sie verstehen, dass die branch-und tag-Namen sind nur Hinweise auf hash-Werte, die ein einzelner Begehen, wenn Sie sagen, dass es 4 Optionen, die das gleiche Verhalten hat, dann ist die erste logische Antwort ist, weil Sie alle auf den gleichen commit
origin
Ich bin mir nicht sicher, aber ich denkeorigin
durch Sie selbst aufgelöst wird, umorigin/HEAD
denen ich denke, dass hängt von deinen github-Einstellungen, in github legen Sie einen default-Zweig',origin/head
beheben zuorigin/[default_branch]
, in Ihrem Fall im vorausgesetzt, es ist master, also das ist, warum es hat die gleiche Wirkung wieorigin/master
.HEAD
zeigt immer auf den aktuellen commit, den Sie stehen auf, so eingit reset --hard HEAD
wird permanent entfernen Sie alle änderungen in Dateien verfolgt und inszeniert Dateien verändert, aber nicht ändern Sie den commit-hash.origin/master
ist der Letzte commit in den entfernten master-branch seit Ihrem letzten fetch/pull, jedes mal, wenn Sie sich verpflichtenmaster
Ihre lokalemaster
ist aktualisiert und Ihreorigin/master
ist auch aktualisiert, wenn jemand anderes schiebtmaster
Ihre repo haben keine Ahnung, dass es ein update gibt, es sei denn, Sie tun einegit fetch
dann Ihreorigin/master
bewegen wird, vor Ihrermaster
oder vielleicht sogar voneinander abweichen.läuft ein
git reset --hard origin/master
wird die gleiche Wirkung haben, wenn Sie derzeit auf dermaster
Zweig und diemaster
ist in sync mitorigin/master
origin/branch
Ich bin mir nicht sicher, was dies eigentlich bedeutet, denn es gibt keineorigin/branch
standardmäßig, so dass ich vermute, Sie erstellt ein Zweig namensbranch
und zufällig in der gleichen commit wie Ihr Meister, um zu bestätigen, Sie können versuchen, einegit branch
zu sehen, alle Ihre Zweige, ich vermute, Sie werden finden ein alsbranch
Zu sehen, alle diese in eine visuelle Art und Weise, die Sie könnten versuchen, laufen
git log --graph --decorate --all
oder ich lieber ein visuelles Werkzeug, wiegitk
, wenn Sie die binary installiert haben, führen Siegitk --all
zu sehen, alle Zweige relativ zueinanderorigin
kann erklärt werden durch die<refname>
Eintrag ingitrevisions(7)
; es vollständig erweitert, umrefs/remotes/origin/HEAD
.origin/master
erweitert, umrefs/remotes/origin/master
, und ähnlichorigin/branch
erweitern würden, umrefs/remotes/origin/branch
(vorausgesetzt, wie du gesagt hast, dass es existiert).master
,HEAD
,origin/something
und vielleicht einige tag, warum nicht, kann alle zeigen auf den gleichen commit, aber Sie sind definitiv nicht die gleiche Sache.origin
ist in der Regel der name eines remote repository.Können Sie Ihre Fernbedienungen und konfigurieren Sie die neue mit
git remote -v
.Versuchen es (mit
-v
) und es wird wahrscheinlich sinnvoll.remote/somebranch
Punkte, um die Spitze einige verzweigen auf einem remote-repository.origin/master
Punkte auf den Kopf vonmaster
auforigin
.Ist es das gleiche wie
master
?Ja und Nein. Wenn Sie ziehen Ihre master-branch, einige arbeiten und in der Zwischenzeit jemand anderes begeht, auf
master
und schiebtorigin
, Sie unterscheiden sich.Wenn Sie eine
git fetch origin
dannorigin/master
haben zusätzliche übertragungen (wird vor).HEAD
ist einfach "der aktuelle commit".Betrachten Sie es als
.
.Sehen diese Frage
Wieder, dieser könnte das gleiche wie
master
, aber wenn Sie Auschecken einer anderen Filiale oder Begehen, oder sind die in der Mitte einen Stellungswechsel, gut, das ist es nicht.Also versuchen, diese auf ein frisches repository, auf dem sonst niemand arbeitet:
Sind Sie gleich!
Natürlich deren Inhalt ist der gleiche.
Ah, schau, jetzt sind Sie verschiedenen begeht!
Und jetzt sind Sie nicht! wir schoben unsere neueste verpflichten und Sie beide auf das gleiche.
Natürlich nicht. Wir haben nicht geschoben
new_branch
zuorigin
ist es nur auf unserem lokalen RechnerWir haben gerade ausgecheckt
123abc
, den alten Kopf dermaster
. Es ist nicht der Kopf, der jedem Zweig, jetzt, aber wir können check it out genau das gleiche.Jetzt ratet mal, was Ihre SHA1 wird bzw. werden?