2011-05-02 21 views
6

Cuando ejecuto este comando:¿Por qué esta fusión producen un conflicto

git log HEAD..other_branch -- some_file.txt 

No hay salida alguna que supongo meants que no hubo cambios en some_file.txt en other_branch. Sin embargo, cuando corro git merge other_branch consigo toda una serie de conflictos en some_file.txt.

Cuando corro:

git log HEAD...other_branch -- some_file.txt 

me sale dos confirmaciones. Uno donde el archivo se modificó y otro donde la rama donde se modificó se fusionó en HEAD.

Supuse que debido a que el archivo solo se cambiaba en una rama, no habría ningún conflicto. ¿Por qué hay conflictos? ¿Hay alguna manera de ver qué va a entrar en conflicto (y por qué) antes de ejecutar git merge?

Respuesta

4

Para agregar a la contribución de manojlds:

Muy bonito. ¿Pero luego lo siguiente debería lograr lo mismo?

git diff master:some_file.txt someBranch:some_file.txt 

de esa manera usted no necesita el pago antes se diferencian contra caché


Respuesta original:

El comando

git log HEAD..other_branch -- some_file.txt 

es idéntica a

git log ^HEAD other_branch -- some_file.txt 

lo que significa darme el registro de todos los commits accesibles desde other_branch pero NO accesibles desde HEAD para some_file.txt. Si este comando no le da salida, significa que some_file.txt no ha cambiado en absoluto en other_branch.

Por otro lado:

git log HEAD...other_branch -- some_file.txt 

es la diferencia simétrica entre la cabeza y other_branch, es decir, las confirmaciones que se encuentran en HEAD y en other_branch pero no en ambos, y son las confirmaciones que se fusionarán cuando fusionar las dos ramas. Así que algo ha ocurrido probablemente a some_file.txt en la cabeza que causan este conflicto con la versión en other_branch

+0

Gracias. Supongo que estoy confundido (obviamente) sobre por qué los cambios que solo ocurrieron en HEAD producirían conflictos cuando me una en other_branch. Nada cambió en other_branch, por lo que no debería haber habido un lugar donde ocurriera un cambio en ambas ramas a conflictos de productos. –

+0

¿Qué dice el registro si agrega -p? ¿Cómo se ve el conflicto de fusión? – ralphtheninja

1

Para añadir a la respuesta de @Magnus Skog y su pregunta:

supuse que era porque el archivo sólo se cambiado en una rama que allí no habría ningún conflicto. ¿Por qué hay conflictos? ¿Hay alguna manera de ver qué va a entrar en conflicto (y por qué) antes de I ejecutar git merge?

En estos casos habría que hacer sobre todo:

git checkout other_branch some_file.txt 

Después, realice

git diff --cached some_file.txt 

para ver los diferenciales y se puede ver fácilmente si usted consigue fusionar conflictos. Si también desea simplemente "fusionar" el archivo solo, puede git commit ahora.

Este es el enfoque que tomo al ver las diferencias en ciertos archivos y también la fusión de archivos específicos

+0

+1 Cool. Ver mi respuesta editada. Aclamaciones – ralphtheninja

Cuestiones relacionadas