fatal: git-write-tree: Fehler beim Erstellen von Bäumen


202

Ich habe eine git pullaus einem gemeinsam genutzten Git-Repository erstellt, aber etwas ist wirklich schief gelaufen, nachdem ich eine ausprobiert habe git revert. Hier ist die Situation jetzt:

$ git stash
Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: needs merge
Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: needs merge
Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: needs merge
Testing/Source/DataStructureAndEncodingDefinition/Cxx/TestDS.cxx: needs merge
Utilities/socketxx/socket++/sockstream.cpp: needs merge
Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: needs merge
Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: needs merge
Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: needs merge
Testing/Source/DataStructureAndEncodingDefinition/Cxx/TestDS.cxx: needs merge
Utilities/socketxx/socket++/sockstream.cpp: needs merge
Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: unmerged (2aafac967c35fa4e77c3086b83a3c102939ad168)
Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: unmerged (78cc95e8bae85bf8345a7793676e878e83df167b)
Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: unmerged (2524db713fbde0d7ebd86bfe2afc4b4d7d48db33)
Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: unmerged (4bb4ba78973091eaa854b03c6ce24e8f4af9e7cc)
Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: unmerged (ad0982b8b8b4c4fef23e69bbb639ca6d0cd98dd8)
Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: unmerged (4868371b7218c6e007fb6c582ad4ab226167a80a)
Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: unmerged (f7a1b386b5b13b8fa8b6a31ce1258d2d5e5b13c5)
Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: unmerged (6ce299c416fbb3bb60e11ef1e54962ffd3449a4c)
Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: unmerged (75c8043a60a56a1130a34cdbd91d130bc9343c1c)
Testing/Source/DataStructureAndEncodingDefinition/Cxx/TestDS.cxx: unmerged (79c2843f2649ea9c87fa57662dafd899a5fa39ee)
...
fatal: git-write-tree: error building trees
Cannot save the current index state

Gibt es eine Möglichkeit, das alles zurückzusetzen?

Vielen Dank

Antworten:


566

Verwenden:

git reset --mixed

statt git reset --hard. Sie werden keine Änderungen verlieren.


29
Beachten Sie, dass das --mixedArgument auch git resetdas Standardverhalten ist, wenn kein Argument angegeben wird. Manpage als Referenz.
Christopher

62
Gültige Antwort, aber es wäre schön, eine Erklärung dafür zu haben, was passiert ist und warum dies notwendig war.
mmigdol

1
@mmigdol Ja - Ich würde gerne eine Erklärung sehen, warum git resetdie (Standard-) --mixedOption auch hier angemessen und effektiv ist. Laut Merge - Git-Problem mit nicht zusammengeführtem Pfad : Dies wechselt zu HEAD und weist git an, alle Zusammenführungskonflikte zu vergessen und das Arbeitsverzeichnis unverändert zu lassen. Heracek, ist das was los ist?
Nealmcb

1
@writofmandamus Monate zu spät, aber beachten Sie den Abstand zwischen Zurücksetzen und den Bindestrichen.
Mike Ortiz

2
FWIW Ich bin auf dieses Problem gestoßen, als ich es tat git stash. Das hat es git reset --mixedgelöst.
Honig

44

Das hat bei mir funktioniert:

Machen

$ git status

Und überprüfen Sie, ob Sie haben Unmerged paths

# Unmerged paths:
#   (use "git reset HEAD <file>..." to unstage)
#   (use "git add <file>..." to mark resolution)
#
#   both modified:      app/assets/images/logo.png
#   both modified:      app/models/laundry.rb

Befestigen Sie sie mit git addjedem von ihnen und versuchen Sie es git stasherneut.

git add app/assets/images/logo.png

6
Das hat bei mir funktioniert. git reset --mixed ist vielleicht besser als der Weltfrieden, aber ohne eine Erklärung dessen, was es tut, rühre ich es nicht an. In meinem Fall gab es eine Kollision bei einem früheren Zug, die ich nicht bemerkte. Das Versteck schlug aufgrund des ungelösten Zuges fehl.
Ian Ollmann

Ich verstehe diese Strategie nicht besser als git reset --mixed, aber sie hat funktioniert und schien besser zu meinem Fall zu passen, weil ich den Fehler git stasheher nach als erhalten habe git revert.
Mars

Ein nicht zusammengeführter Pfad bedeutet, dass Sie ausgeführt haben git mergeoder das Äquivalent zu git merge. Er hat versucht, zwei verschiedene Änderungssätze für diese Datei zusammenzuführen, ist jedoch fehlgeschlagen.
Siddhantsomani

11

Um die Antwort von malat zu verfolgen, können Sie Änderungen vermeiden, indem Sie einen Patch erstellen und ihn zu einem späteren Zeitpunkt erneut anwenden.

git diff --no-prefix > patch.txt
patch -p0 < patch.txt

Speichern Sie Ihren Patch aus Sicherheitsgründen außerhalb des Repository-Ordners.


Dies gab mir: SDGL132d9f4b4: glitch-common dstromberg $ patch -p0 </tmp/patch.txt patch: **** In der Patch-Eingabe wurde nur Müll gefunden.
Dstromberg

Ich denke, Sie sollten mvden Patch wieder in das Verzeichnis zurückversetzen, aus dem Sie ihn erstellt haben. 1. git diff2. mv patch.txt /tmp3. git stash4. mv /tmp/patch.txt .5.patch -p0
yunzen

9

Ich benutzte:

 git reset --hard

Ich habe einige Änderungen verloren, aber das ist in Ordnung.


6
Nur eine Anmerkung: git revertVersuche, Änderungen aus der Vergangenheit zusammenzuführen; Sie haben richtig verwendet git reset, um die Uhr einfach zurückzuspulen. Es ist bedauerlich, dass git stashdies bei Zusammenführungskonflikten nicht funktioniert.
Josh Lee

2
Wenn Sie Änderungen verlieren, ist dies keine Lösung;)
Pedro Magalhães

5

Vielleicht gibt es einige nicht zusammengeführte Pfade in Ihrem Git-Repository, die Sie vor dem Verstecken auflösen müssen.


1
Das hat mir geholfen, also werde ich es mit +1 bewerten. Aber ich habe eine ausführlichere Antwort gegeben.
David Rz Ayala

-1

Dies geschah für mich, als ich versuchte, meine Änderungen zu speichern, aber dann hatten meine Änderungen Konflikte mit dem aktuellen Status meiner Niederlassung.

Also habe ich git reset --mixedden Git-Konflikt gelöst und wieder versteckt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.