Git Branch Heads und Tags sind Zeiger auf Commits, und diese Pointer können sich entweder implizit (nach einem commit
) oder explizit (nach einem branch -m
) bewegen.
Zeichnet Git den Verlauf des Zustands dieser Zeiger auf?
Ich sehe dafür mindestens zwei Gründe:
Beachten Sie, dass das oben Genannte in Mercurial möglich ist, da es den Verzweigungsnamen in jedem Commit speichert.
Also wieder, in Git sind die Inhalte von .git / refs / versionskontrolliert, oder gibt es eine Möglichkeit, sie so zu machen?
(Ich versuche, mich für Mercurial oder Git für ein Team zu entscheiden, und ich möchte sicherstellen, dass alle Änderungen am geteilten Repo, einschließlich der Refs, aufgezeichnet werden. Es ist mir egal, was Entwickler mit ihren privaten Repos machen .)
Danke.
Sie werden nicht versioniert, aber die Funktion reflog bleibt bestehen eine lokale Geschichte, die Sie verwenden können, um Fehler rückgängig zu machen. Wenn jemand jedoch einen Zweig zurückspult, um einige Commits vom Ende zu verwerfen, wird es sofort offensichtlich, wenn ein anderer Entwickler versucht, seinen Checkout für diesen Zweig zu aktualisieren, da Git diese Änderung nicht lokal ausführen wird, solange --force
nicht ist benutzt. Sie können die Commits zu diesem Zeitpunkt einfach zurück in das gemeinsame Repository schieben.
Es gibt Erweiterungen für Unternehmens-Git-Server wie Gerrit, die Ihren Zweigverlauf versionieren. Wenn eine Verzweigung auf eine nicht schnelle Weise gelöscht oder aktualisiert wird (push -f) Es wird die vorherige Version unter einem speziellen Verweis zurück unterstützen, so dass sie bei Bedarf wiederhergestellt werden können und nicht von Garbage Collection bereinigt werden. Gerrit-Administratoren können ausgewählte Commits trotzdem entfernen, wenn dies aus rechtlichen Gründen erforderlich ist.
Es gibt zwei Möglichkeiten:
%Vor%und:
%Vor%Entspricht dem ersten Fall:
%Vor%