Git verliert Geschichte / Inhalte einzelner Dateien

8

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:

  1. Wie in aller Welt ist das passiert?

  2. Wie repariere ich es? (Wir haben Probleme mit mehreren Dateien in unserem Repo)

UsAaR33 05.08.2011, 00:34
quelle

4 Antworten

4

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.

    
UsAaR33 05.08.2011 02:42
quelle
1

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%

?

    
Ryan Stewart 05.08.2011 02:00
quelle
0

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.

    
Nayuki 05.08.2011 00:53
quelle
0

Sie können dieses Bash-Skript auch in dem Ordner verwenden, in dem Sie sehen möchten, welche Dateien ihre Commits verloren haben:

%Vor%
    
Abd Rmdn 31.03.2016 11:27
quelle

Tags und Links