when - what is the command to delete a remote branch in git?
Git fusiona estrategia para ignorar archivos borrados (4)
Tengo una rama especial (versión de lanzamiento) que es una copia exacta de la rama maestra con algunos archivos y directorios eliminados. No se está produciendo ningún desarrollo en esta rama, sin embargo, debe estar sincronizado con el maestro, por lo que las actualizaciones en el maestro deben enviarse constantemente a esa rama.
Al hacer una fusión normal ( git merge master
) constantemente obtengo conflictos como (por ejemplo, un archivo README de muestra):
CONFLICT (delete/modify): README deleted in HEAD and modified in master
que se espera: trato de fusionar cambios en archivos, que he eliminado. Por lo tanto, para resolverlos utilizo git rm README
.
Para automatizarlo, pensé que podía usar la resolución automática de conflictos especificando -X el nuestro. Las páginas de manual sugieren que es lo correcto para mí:
This option forces conflicting hunks to be auto-resolved cleanly by favoring our version. Changes from the other tree that do not conflict with our side are reflected to the merge result.
Sin embargo, cuando hago git merge -s recursive -X ours master
sigo teniendo los mismos conflictos de borrado / modificación sin resolver. ¿Qué estoy haciendo mal? ¿Hay otra forma de automatizar la resolución de conflictos?
Al analizar esta pregunta , parece que la estrategia recursiva con la nuestra o su opción no considera la eliminación como un conflicto.
Sin embargo, lo que puede hacer es usar esta función para especificar una estrategia específica para algunos archivos. Apostaría a que nuestra estrategia (no la opción) haría el truco para esos archivos.
EDITAR:
Como se indica en el comentario, no puedes hacer esto!
Definitivamente debe comunicarse con la lista de correo de Git si esta es una característica muy importante para usted ( [email protected] )
Probablemente haya una mejor manera de hacerlo, pero resolví un problema similar haciendo la fusión (con la estrategia de fusión predeterminada) y luego ejecutando
git status | grep ''deleted by us'' | awk ''{print $4}'' | xargs git rm
Después de esto, debe resolver otros conflictos como de costumbre y luego cometer.
Esto solo elimina todos los archivos que se han eliminado en la rama actual, que creo que es lo que desea.
Puede usar rebase en lugar de fusionar para actualizar la rama de lanzamiento.
git merge master
git status --porcelain | awk ''{if ($1=="DU") print $2}'' | xargs git rm
git commit