Head in Git wieder anhängen
Ein Git-Repository kann als eine Gruppe von Objekten und Referenzen definiert werden. Branchen sind die Objekte, mit denen wir unsere Arbeit präsentieren. Git befasst sich auch mit Tags, die Commits in dem jeweiligen Zweig referenzieren.
Ein commit
ist wahrscheinlich der Zustand des verwendeten Quellcodes zu einem bestimmten Zeitpunkt. Commits
bestehen aus Parents und Children sowie ganzen Daten darüber, wer den Commit erstellt hat und wann er erstellt wurde. Commits
werden im Repository als Objekte im Branch platziert.
Die HEAD
-Referenz zeigt auf den letzten letzten Commit im aktuellen Zweig. Der HEAD
-Zeiger ist ein Verweis auf den aktuell ausgecheckten Zweig und zeigt auf die Spitze eines Zweigs.
Sie können jedoch in der Zeit zurückgehen, ohne eine Filiale zu überprüfen. Sie können den HEAD
-Zeiger verwenden, um jeden Commit in einem Zweig zu greifen, und dann können Sie den Index verwenden, um jede Version einer Datei einfach zu greifen.
Sie können den HEAD
-Zeiger und die Indexzeiger verwenden, um das Auschecken
zu einem bestimmten Commit durchzuführen, das in Git als detached HEAD
-Zustand bezeichnet wird. Darüber hinaus können Sie einen bestimmten Commit auschecken und einen neuen Zweig basierend auf einem bestimmten Commit in einem Zweig erstellen.
Es wird kein Problem, wenn wir das nur alle paar Jahre machen. Wenn wir es jedoch oft wiederholen, werden wir uns bald fragen, wie wir zu dem Zweig zurückkehren können, an dem wir gearbeitet haben.
Die Lösung ist sehr einfach, denn bevor wir einen Zweig auschecken, sollten wir den Befehl git checkout master
verwenden. Dieser Befehl bringt uns zurück zu dem Zweig, an dem wir gearbeitet haben, bevor der Commit abgeschlossen war, aber er wirkt sich nicht auf den Commit aus, den wir ausgecheckt haben.
Eine saubere Lösung wäre, ein neues Git-Repository einzurichten, das speziell für die Aufbewahrung der Patch-Serie bestimmt ist, und es anderen zur Verfügung zu stellen, um jederzeit den neuesten Zweig herunterzuladen.
Diese Situationen sind selten genug, dass die Kosten für Benutzerfreundlichkeit und Leistung der Implementierung von getrennten HEADs ihren Nutzen überwiegen, sodass Git derzeit diese Funktion fehlt. Git kann Commits ändern. Es ist jedoch unmöglich, den letzten Commit auf einem abgetrennten HEAD zu ändern.
Git hat eine Möglichkeit, Commits dauerhaft zu löschen, indem es einen geheimen Zweig erstellt, die Commit-Daten in diesem Zweig aufzeichnet und dann den Commit dauerhaft aus HEAD
löscht. Diese Funktion ist jedoch nur verfügbar, während ein einzelnes Commit von HEAD
getrennt ist. Wenn ein Commit mehrere Eltern hat, ist es unmöglich, ihn aus diesem Zweig zu löschen.
Kopf getrennt in Git
Wenn wir jedoch zu einer anderen Filiale wechseln, ist die Situation anders. Wenn wir unser Arbeitsverzeichnis ausgecheckt haben, wird es auf HEAD
aktualisiert, und wir können die darin enthaltenen Dateien nicht mehr ändern, oder wir können einige neue Änderungen vornehmen, wenn sie nicht mit dem Zweig kollidieren, zu dem wir gewechselt haben.
In diesem Fall wird HEAD
vom aktuellen Zweig gelöst. Gleichzeitig können wir den Befehl git checkout
verwenden, um Zweige zu ändern, ohne unser Arbeitsverzeichnis auf HEAD
zu aktualisieren, sodass HEAD
gleichzeitig mit dem Anhängen getrennt werden kann.
Es ist ziemlich verwirrend, aber es kann nützlich sein, wenn wir zwischen Zweigen wechseln möchten, ohne das Arbeitsverzeichnis schnell zu berühren, oder zu einem anderen Zweig wechseln und gleichzeitig ein neues Arbeitsverzeichnis auschecken möchten. Dazu können wir git checkout -b <newbranchname> <commit>
verwenden.
Wir können so auftreten; Schauen Sie sich einfach die Filiale an, die wir wünschen.
$ git checkout <branch>
Beispielsweise:
$ git checkout master
Wenn wir die Änderungen, an denen wir arbeiten, beibehalten möchten, sollten wir einen neuen Zweig erstellen oder unsere Änderungen im Zweig speichern. Jeder checkout
eines kürzlich erfolgten Commits, der nicht der Name einer unserer Branches sein kann, gibt uns einen abgetrennten HEAD.
Wenn HEAD
getrennt ist, sehen Commits normal aus, außer dass kein benannter Zweig aktualisiert wird. Es ist wie ein unbekannter Zweig. Zum Beispiel können wir sagen, wenn wir einen entfernten Zweig auschecken, bevor wir ihn zuerst verfolgen; Irgendwann werden wir mit einem abgelösten HEAD
enden.
Abdul is a software engineer with an architect background and a passion for full-stack web development with eight years of professional experience in analysis, design, development, implementation, performance tuning, and implementation of business applications.
LinkedIn