Ich arbeite in einer kleinen Firma und unser Git Repo ist ein wenig durcheinander. Ich habe gerade ein git pull
gemacht und meine früheren Änderungen sind weg!
Wenn ich mit HEAD im Master-Zweig arbeite, zeigt git log
mein letztes Commit b94940c63ef965ce45b0d64ccfba4359134d2552 in seinem Verlauf an.
Nun, wenn ich git log filename
für die problematische Datei mache, die meine Änderungen verloren hat, wird dieses Commit nicht angezeigt (zeigt nur ein früheres Commit).
Performing git log --follow filename
, mein commit b94940c63ef965ce45b0d64ccfba4359134d2552 wird als zuletzt angezeigt.
Und sicher genug, wenn ich das tue:
%Vor%dann wird das Commit angezeigt und sind meine Änderungen in der Datei!
Mit anderen Worten, das Commit, das ich gemacht habe, wird in der Verzweigungshistorie angezeigt (Blockierung eines Branch-Merges), aber einzelne modifizierte Dateien haben dieses Commit in ihrem Verlauf nicht! (es sei denn, ich überprüfte explizit dieses Commit).
Fragen:
Wie in aller Welt ist das passiert?
Wie repariere ich es? (Wir haben Probleme mit mehreren Dateien in unserem Repo)
Okay, ich habe das Problem herausgefunden. Wenn ein Kollege zog, bekam er einige Konflikte. Anstatt ihn aufzulösen, setzt er jede gestaffelte Datei zurück. Dies war vergleichbar mit einem git checkout old_version für einzelne alte Dateien. Also hat sich HEAD auf dem Master auf einige Dateien bezogen, die old_version hatten.
Jetzt stelle ich manuell wieder her, was er weggeblasen hat.
Moral der Geschichte: Das Ändern von Git-Operationen (Auschecken, Zurücksetzen usw.) einzelner Dateien ist ziemlich gefährlich.
Dies sollte nur ein Kommentar sein, aber es wäre schwer zu lesen. Nach dem Auschecken Master:
%Vor%Was ist die Ausgabe von
? %Vor%und
%Vor%und
%Vor%?
Zunächst sollten Sie herausfinden, was die Git-Befehle tun und welche Daten im Repository gespeichert werden.
Erhalte ein Historien-Visualisierungstool wie Giggle oder Gitk, um deinen Commitverlauf zu sehen und um zu sehen, auf was Commit basiert was commit.
git pull
macht zwei Dinge: Es ruft die neuen Commits aus dem Remote-Repository ab, und verbindet den Kopf des Remote-Repositorys mit Ihrem aktuellen Kopf (in Ihrer aktuellen Verzweigung).
In Anbetracht dessen sollten Sie in Zukunft vorsichtiger sein. Anstatt git pull
zu verwenden, können Sie git fetch
eingeben und manuell zusammenführen, was zusammengeführt werden muss. Auf diese Weise haben Sie die Kontrolle darüber, welche Änderungen Sie vornehmen.
Was Ihre aktuelle Situation angeht, ich glaube nicht, dass Git Daten verliert. Sie haben gesagt, dass sich Ihre Datei noch im Verlauf befindet. Jetzt müssen Sie also wahrscheinlich einige Creatives zurücksetzen (zu alten Versionen zurückkehren) oder Patches (möglicherweise manuell), um Ihre Projektdateien in den gewünschten Zustand zu versetzen.