Sind Git-Zweige nur Tags?

8

Ich bemerkte die Fähigkeit von git, zu einem bestimmten Commit auszuchecken. Danach begann ich zu verstehen, wie git wirklich funktioniert.

Aber ich möchte sicher sein, dass das richtig ist: Wenn ich einen Zweig erstelle, ist es nichts anderes als ein Tag, das auf das aktuelle Commit zeigt. Wenn ich diesen Zweig auschecke, checke ich das Commit, auf das dieses "Tag" verweist. Jetzt, wenn ich etwas begehe, wird ein neues Commit erstellt. Das aktuell ausgecheckte Branch-Tag wird nun aktualisiert, sodass es auf das neue Commit zeigt.

Also ... ich könnte das alles manuell machen, oder? Es ist nur ein Feature, um Dinge einfacher zu machen.

    
Van Coding 28.09.2011, 10:04
quelle

3 Antworten

7

Ja, das ist ein gutes Modell dafür, was ein Zweig ist. Aber Achtung, über die Terminologie - Git hat auch ein Konzept von Tags, aber Tags bewegen sich nicht - sie zeigen für immer auf das gleiche Commit.

Update: Fügen Sie ein wenig mehr Details hinzu, die von Interesse sein könnten ...

Ihr aktueller Zweig ist in der Datei HEAD gespeichert, die entweder auf einen Zweig zeigt, in diesem Fall sieht der Inhalt folgendermaßen aus:

%Vor%

... oder es zeigt direkt auf ein Commit, in diesem Fall sieht der Inhalt wie folgt aus:

%Vor%

Im ersten Fall wird der Zweig master beim Erstellen eines neuen Commits vorgezogen, aber in der letzteren Situation (aus hoffentlich offensichtlichen Gründen bekannt als "detached HEAD") wird beim Erstellen eines neuen Eintrags kein Zweig geändert commit.

    
Mark Longair 28.09.2011, 10:07
quelle
4

Branch ist ein Referenzzeiger, er zeigt auf den aktuellen Commit, wie Sie sagen.

Aber Sie sollten diese Wörter nicht synonym verwenden, weil sie etwas anderes bedeuten.

    
mateusz.fiolka 28.09.2011 10:07
quelle
3

Ja, bei git ist eine Verzweigung im Grunde nur ein Verweis auf eine Festschreibung, die beim Commit automatisch aktualisiert wird. Du kannst es selbst verfolgen, wie du es bemerkt hast.

In der Tat enthüllen git alle Low-Level-Blöcke, auf denen mehr Abstraktion auf höherer Ebene aufgebaut wird. Sie können, wenn Sie wollen, den Befehl git hash-object , git mk-tree und git commit-tree manuell verwenden, um git add und git commit manuell auszuführen (siehe Raw Git Kapitel im Git Book, um zu wissen, wie man es im Detail macht.)

Bitte beachten Sie auch, dass Git zwei Arten von Tags hat. Die Lightweight-Tags sind nur Referenzen auf Commits (über ihren Hash), die nicht automatisch verschoben werden. Es gibt auch die Idee von Tag-Objekten , die echte Git-Objekte sind, wie commit archiviert werden und die eine Nachricht enthalten können und eine Unterschrift.

    
Sylvain Defresne 28.09.2011 10:17
quelle

Tags und Links