¿Cómo se pueden combinar dos ramas en git, reteniendo archivos necesarios de una rama?git merge: Eliminando archivos que quiero mantener!
Al fusionar dos ramas, si se eliminó un archivo en una rama y no en otra, el archivo finalmente se elimina.
Por ejemplo:
- Existe un archivo en el maestro cuando se hace una nueva rama
- quita el archivo de maestro, ya que no es (aún) necesitamos
- se realizan cambios en la rama para añadir una característica, que se basa en el archivo existente
- hacer correcciones de errores en el maestro (no puede ser descartada)
- te fusionas algún día, ¡y el archivo ya no está!
Cómo reproducir:
Crear un repositorio git con un archivo.
git init echo "test" > test.txt git add . git commit -m "initial commit"
Crear una rama
git branch branchA
Eliminar el archivo maestro en
git rm test.txt git commit -m "removed file from master"
hacer cualquier cambio en branchA que no tocan el archivo eliminado (que tiene que ser sin cambios para evitar Conflictos)
git checkout branchA touch something.txt git add . git commit -m "some branch changes"
Desde aquí, de cualquier manera que he encontrado para fusionar estas dos ramas, se elimina el archivo test.txt. Suponiendo que estábamos confiando en el archivo para branchA
, este es un gran problema.
ejemplos Failing:
Combinar 1
git checkout branchA
git merge master
ls test.txt
Combinar 2
git checkout master
git merge branchA
ls test.txt
Rebase 1
git checkout branchA
git rebase master
ls test.txt
Creo que se puede resolver este problema mediante el rebase branchA (siempre y cuando no sea pública) del último maestro antes de la fusión. Una base de datos interactiva le dará la oportunidad de decirle a git que definitivamente desea el archivo, luego la fusión debería realizarse sin problemas. – jchook