He estado desarrollando una nueva función en una nueva sucursal y, por otro lado, he realizado bastantes cambios en mi sucursal maestra.
¿Es posible fusionar la rama maestra en mi nueva rama para mantenerla actualizada para que no tenga demasiados conflictos de fusión una vez que la nueva característica haya finalizado?
git
version-control
merge
branch
mnml
fuente
fuente
Respuestas:
Puede
git merge master
ogit rebase master
, en este caso, preferiría git rebase .Porque
git rebase
hace que los cambios en la rama de características se realicen además de los cambios en la rama maestra, lo que simplifica el gráfico de la versión.Rebase
Tomando el ejemplo del manual de git rebase ,
git rebase master
en ramafeature
:Sin embargo,
git rebase
solo es adecuado cuando la rama no se ha distribuido, o habrá confusión y trabajo adicional en sentido descendente, porque los viejos compromisos A, B, C ahora se reemplazan por nuevos compromisos A ', B', C ', más F y G que no estaban allí antes.El resultado real después
git rebase master
en la ramafeature
es este:Los commits A, B, C cuelgan después del rebase, pero se puede acceder a ellos
git reflog feature
.Unir
Si alguien ha tirado de su rama, o la ha empujado a alguna parte, debe fusionarse con ella para evitar confusiones y trabajo adicional en el otro extremo. Consulte Recuperación de rebase ascendente .
Este es el resultado de
git merge master
en ramafeature
:Alternativamente, si está
git merge feature
en la ramamaster
, se vería así:fuente
git rebase master
, y "cambiará" los cambios en la rama de características para que se "basen" en los cambios en la rama maestra. Si los cambios en la rama maestra entran en conflicto con los cambios en la rama característica, git le pedirá que los resuelva y continúe, los omita o cancele. Si no está seguro, puede verificar una rama de prueba para probarlagit checkout -b test-feature feature
(suponiendo que su rama de características se llame "característica").git rebase
solo se debe usar si la rama no se ha distribuido, lo que supuse que era el caso ya que dijiste que era una nueva rama, lo siento. Consulte Recuperación de rebase ascendente en los documentos a los que me vinculé . Tendrás que usargit merge
en su lugar. Y puede utilizarlogit reflog
para encontrar el encabezado de su rama de características anterior si desea recuperarlo.