2012-03-22 29 views
97

Estoy reajustando en git, y un conflicto que recibo es 'ambos agregados' - es decir, exactamente el mismo nombre de archivo ha sido agregado independientemente en mi sucursal, y en la rama en la que estoy trabajando. git status me dice:Resolviendo un conflicto de fusión "ambos agregados" en git?

# Unmerged paths: 
# (use "git reset HEAD <file>..." to unstage) 
# (use "git add/rm <file>..." as appropriate to mark resolution) 
# 
#  both added:   src/MyFile.cs 

Mi pregunta es, ¿cómo puedo solucionar esto? ¿Debo usar una herramienta de combinación o hay una forma en que puedo hacerlo solo desde la línea de comandos? Si yo git rm src/MyFile.cs, ¿cómo sabe Git qué versión de archivo quiero eliminar y cuál quiero conservar?

Respuesta

97

Si usa git rm git eliminará todas las versiones de esa ruta del índice, por lo que su acción de resolución lo dejará sin ninguna versión.

Puede usar git checkout --ours src/MyFile.cs para elegir la versión de la rama en la que está modificando o git checkout --theirs src/MyFile.cs para elegir la versión de la rama que está modificando.

Si desea una combinación, necesita utilizar una herramienta de fusión o editarla manualmente.

+1

Gracias. Y me di cuenta de que la razón por la que la herramienta de fusión no funcionaba era porque git crea los archivos .LOCAL y .REMOTE para la fusión, pero no el archivo .BASE. Creo que debería simplemente crear un archivo .BASE vacío. Si crea manualmente el archivo .BASE vacío, la herramienta de fusión funciona bien. – Jez

+1

@Jez: Vea este hilo: http://thread.gmane.org/gmane.comp.version-control.git/188776/focus=188867 –

+1

¿Entonces está diciendo que esto se solucionará en una versión reciente de git? – Jez

51

A veces me resulta confuso usando las opciones --theirs y --ours para identificar de dónde vendrá el archivo. ¡La mayor parte del tiempo el mío estará en la rama que estoy modificando, a la que se hace referencia en --theirs!

También puede utilizar git checkout <tree-ish> -- src/MyFile.cs

Cuando el <tree-ish> puede ser reemplazado, ya sea por el nombre de la sucursal o cometer-id que contiene el archivo que desea mantener.

git checkout 6a363d8 -- src/MyFile.cs

git checkout my_branch -- src/MyFile.cs

git checkout HEAD -- src/MyFile.cs

26

Al hacer ...

git checkout --ours someFile

Puede parecer que no hizo nada al hacer git status.

Simplemente recuerde hacer esto después.

git add someFile 
git status 
Cuestiones relacionadas