2012-05-13 14 views
18

Tenemos un proyecto basado en git con un amigo y una rama principal. Hizo algunos cambios en algunos archivos, hice cambios en algunos otros archivos, y es muy probable que podamos hacer cambios en un par de los mismos archivos. Se comprometió y empujó todos sus cambios al repositorio. Luego fui y comprometí mis cambios e intenté sacar sus cambios. Me presentaron algunos conflictos que en su mayoría resolví a favor de sus cambios porque eran archivos que no cambié. Luego, cuando traté de empujar, recibí una fatal: no puedo hacer una confirmación parcial durante una fusión.Error Xcode Git Merge está atascado

Estas son las pantallas que obtengo. showing the files with source control status

The window when i try to commit

The error message

¿Qué puedo hacer yo? El proyecto funciona bien, excepto que el menú principal del juego no muestra las imágenes que se supone que deben, en las que estaba trabajando y los archivos de clase en los que trabajó, además de otros dos.

+0

Gracias por su respuesta, ¡me ayudó! – NSPratik

+0

Xcode todavía apesta. –

Respuesta

1

Xcode tiene problemas con archivos xcuserdata y tuve que descartar los cambios y recommitt

4

No puede comprometerse hasta que se resuelvan todos los conflictos de combinación. Según lo que describió, hay archivos que ambos han cambiado. Son conflictos que debes resolver.

Nunca he resuelto un conflicto en Xcode. Siempre puedes resolver el conflicto desde la aplicación Terminal. Una vez en un terminal y suponiendo que haya instalado las herramientas de línea de comandos Xcode tratan:

git mergetool 
git commit 

Esto/debería aparecer una ventana FileMerge que le permite seleccionar su o su edición. La otra opción que tiene desde la Terminal es resolver los conflictos simplemente aceptando sus cambios. Esto romperá su código, pero puede volver y solucionarlo. Para ese intento:

git status 
git checkout --theirs -- /path/to/a/conflicted/file ... 
git add -- /path/to/a/conflicted/file ... 
git commit 

Luego edite los archivos para corregir su funcionalidad. Una vez que se hayan resuelto todos los conflictos, podrá volver a comprometerse en Xcode.

17

Ésta es una situación frustrante común:

  1. abrir el terminal
  2. Ir a la carpeta de repositorio del proyecto (la que contiene el archivo oculto .git)
  3. mover la cabeza de lado a escribir fusión mv .git/MERGE_HEAD .git/MERGE_HEAD_STUCK

Su problema ya debe estar medio resuelto, en algún caso debe realizar una extracción desde el organizador:

  1. Abrir el Organizador - Repositorios "Archivo> control de la fuente> repositorios ..."
  2. Encuentra el repositorio de su proyecto y hacer un tirón desde aquí.

Entonces debería poder usar Git nuevamente desde Xcode, probablemente tendrá que resolver algunos conflictos de combinación pero al menos esto estará bajo Xcode y no en el terminal.

Nota: Considere removing the .DS_Stores from your git repository

1

Abrir el terminal y hacer uso de los siguientes:

Para encontrar los archivos que tiene conflictos: git status

Para solucionar conflictos de combinación y git mergetool

Es posible que necesite añadir algunos archivos sin seguimiento: git add .

Finalmente confirmó cambios git commit

0

He resuelto esto con un enfoque completamente diferente, usando solamente control de código fuente de Xcode.

Antecedentes: Otro equipo realizó cambios en el repositorio remoto de Git (a través de Beanstalk). En mi extremo, los archivos .xcodeproj entraron bajo un directorio diferente, y los cambios no tuvieron lugar. Más tarde, cuando intenté comprometerme, recibí un error de Tree Conflict en Xcode.
Tree Conflict Screenshot

Siendo casi imposible corregir usando Xcode, que sustituyen el archivo .xcodeproj con una versión descargada desde el servidor Git. El resultado ... el proyecto de Xcode pareció desaparecer, sin embargo, todas las actualizaciones del corrupto Pull aparecieron como cambios que hice y se prepararon para un commit. Look at all these Mods and Added files Sin embargo, al intentar Commit, recibí el mismo error "fatal: no se puede hacer una confirmación parcial durante una combinación", que se discute aquí.

Así es como resolví el problema ... (Ahora, entiendo que soy un programador novato, por lo que podría carecer de cierta comprensión ... pero mi ignorancia me llevó a buscar otra forma de hacerlo). Primero, Cloné mi Rama principal en una Rama secundaria y cambié a esa rama. Luego creé una Copia de Trabajo y coloqué el directorio en esa copia de trabajo fuera del directorio original del proyecto. (No sé si esto fue necesario, pero es lo que hice cuando leí otras técnicas de resolución de problemas.) Luego cambié las ramas al maestro, donde me di cuenta de que todos mis archivos en etapas (cambios a Commit) habían desaparecido. Para asegurarme de que todos los archivos se actualizaron a los últimos cambios realizados por la otra parte, creé una nueva rama llamada ThirdBranch, que duplicó todos los archivos, la apunté al servidor de Git y dejé que Beanstalk comparara mi versión de servidor de la rama principal con la La rama ThirdBrach acabo de presionar (línea por línea), y todos los cambios de la otra parte estaban presentes en mi Xcode. Esto significaba que mi repositorio principal y el repositorio principal de Git eran los mismos, lo que confirma que resolví el problema solo con Xcode.

No me pregunte cómo, más allá de lo que acabo de describir ... y sin duda llene los huecos que omite. Soy nuevo en esto y no entiendo todo. Tal vez un programador experimentado pueda separar la información irrelevante de la relevante y recrear esta técnica con mayor claridad, que es en parte la razón por la que estoy publicando esto.

1

Cuando tengo problemas con XCode, simplemente vuelvo a AppCode (versión de prueba si es necesario) y hago una confirmación desde la carpeta del proyecto de nivel superior.

AppCode detecta el escenario de combinación y soluciona el problema con Merge parcial. Del mismo modo, si AppCode no puede resolverlo, uso Github Desktop. Solo si todo esto falla, volveré a los comandos de bajo nivel.