2011-03-30 7 views
133

Hice un git pull desde un repositorio git compartido, pero algo salió realmente mal, después de que probé un git revert. Aquí está la situación ahora:fatal: git-write-tree: error construyendo árboles

$ 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 

¿Hay alguna manera de restablecer todo eso?

Gracias

Respuesta

417

Uso:

git reset --mixed

en lugar de git reset --hard. No perderá ningún cambio.

+5

¡Esta respuesta merece más votos favorables! –

+0

Sí definitivamente es más relevante –

+1

¡Impresionante! No sabía acerca de --mixed –

8

que utilizan:

git reset --hard 

He perdido algunos cambios, pero esto es aceptable.

+6

Sólo una nota: [ 'git revert'] (http://www.kernel.org/pub/software/scm/git/docs/git-revert.html) intenta combinar los cambios del pasado ; has utilizado correctamente 'git reset' para simplemente rebobinar el reloj. Es desafortunado que 'git stash' no funcione con conflictos de combinación. –

+0

¡Gracias por la explicación! – malat

+0

¡OMG! Funcionó. ¿Lo que acaba de suceder? ;) – nopper

4

tal vez hay algunas rutas no fusionadas en su repositorio de git que debe resolver antes de almacenarlas.

+1

Esto me ayudó, así que le daré un +1. Pero puse una respuesta más amplia. –

9

Para realizar un seguimiento de la respuesta de malat, puede evitar perder cambios creando un parche y volver a aplicarlo más adelante.

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

Guarde su parche fuera de la carpeta del repositorio por seguridad.

+0

Esto me dio: SDGL132d9f4b4: glitch-common dstromberg $ patch -p0 dstromberg

+0

Creo que deberías 'mv' el parche nuevamente en el directorio desde donde lo creaste. 1. 'git diff' 2.' mv patch.txt/tmp'3. 'git stash' 4.' mv /tmp/patch.txt .' 5. 'patch -p0' – HerrSerker

20

Esto funcionó para mí:

hacer

$ git status 

Y comprobar si tiene 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 

solucionarlos con git add a cada uno de ellos y tratar git stash nuevo.

git add app/assets/images/logo.png 
+3

Esto funcionó para mí. git reset --mezclado puede ser mejor que la paz mundial, pero sin alguna explicación de lo que hace, no lo estoy tocando. En mi caso, hubo una colisión en un tirón anterior que no noté. El alijo falló debido a la extracción no resuelta. –

+0

No entiendo esta estrategia mejor que 'git reset --mixed', pero funcionó, y pareció ser una mejor opción para mi caso porque recibí el error después de' git stash' en lugar de 'git revert'. – Mars

Cuestiones relacionadas