2016-12-08 4 views
0

ich eine Repository Geschichte wie in diesem Bild habe (von gitk genommen): Git HistoryGit automatisches Zusammenführen entfernt einige Dateien

Nun geschah etwas Seltsames:

commit (a) und (b) eine gemeinsamer Vorfahre (derzeit markierte Linie).

In commit (a) "Commit für flexible Präambel" wurden einige Dateien zum Repository hinzugefügt. Die Dateien finden Sie im Repo, wenn Sie sich den Quellenbaum für dieses bestimmte Git-Commit ansehen.

In commit (b), welches das Merge-Commit ist, wurden plötzlich die Dateien von (a) aus dem Repository entfernt.

Die Verschmelzung wurde automatisch von TortoiseGit nach dem Ziehen durchgeführt.

Leider kann ich nicht herausfinden, was hier passiert ist. Was hat der Benutzer falsch gemacht, so dass die Dateien entfernt wurden? Oder ist es normal, dass in dieser Konstellation die Dateien entfernt werden?

Die Dateien waren immer noch nach der ersten Zusammenführung (blaue und graue Linie am 2016-12-01 19:59:52).

Antwort

1

Einer der Eltern in Commit b entweder diese Dateien entfernt oder die Dateien waren nicht in diesem Elternteil vorhanden. Git hat zwei Versionen der Realität. Eine Version, die aus commit a stammt, besteht darin, dass einige neue Dateien hinzugefügt wurden. Die andere Version sagt, dass diese Dateien nicht da sind. Nach der Zusammenführung ist nur eine Version möglich. Warum hat Git die Version gewählt, in der die Dateien nicht vorhanden sind, wenn der Hauptzweig in der Zusammenführung (d. H. Derjenige, in den ein anderer Zweig zusammengeführt wurde) diese Dateien nicht enthält, dann hat Git seine Version der Dinge bevorzugt.

In jedem Fall können Sie die Dateien einfach wieder hinzufügen, indem sie sich von der Überprüfung begehen, wo sie über existierte:

git checkout <SHA-1> -- filename 
+0

Offenbar in der nicht dort begehen markierte waren (vor (a)) werden die Dateien (Sie wurden später im Commit hinzugefügt). Sollte das Zusammenführen in (b) nicht erfolgen, dann kombinieren Sie die Änderungen von beiden Zweigen (d. H. Die rote Linie und die grau-> violette Linie). In der violetten Linie wurden einige Dateien hinzugefügt, in den roten Zeilen wurden einige nicht verwandte Dateien geändert. –

+0

@ MaximilianMatthé Ich habe diese Art von Ding oft mit Git passieren gesehen. Stellen Sie sich eine Zusammenführung vor, indem Sie zwei Geschichten kombinieren. Die Geschichte sagt, dass eine Reihe von Dateien da ist. Geschichte zwei sagt nein sie sind nicht da. Dies muss in Einklang gebracht werden. –

Verwandte Themen