Errores de fusión de Git
Tengo una rama de git llamada 9-sign-in-out
con un código que funciona perfectamente y quiero convertirla en maestra. Actualmente estoy en la rama maestra.
$ git branch
9-sign-in-out
* master
Estoy intentando cambiar de 9-sign-in-out
rama, pero no me permite:
$ git checkout 9-sign-in-out
app/helpers/application_helper.rb: needs merge
config/routes.rb: needs merge
error: you need to resolve your current index first
¿Alguna idea de cómo puedo ignorar todos los errores de la rama maestra y convertir la 9-sign-in-out
rama en maestra? ¿ Quizás git rebase ? Pero no quiero perder el código en 9-sign-in-out
la sucursal.
Vale la pena comprender qué significan esos mensajes de error needs merge
e error: you need to resolve your current index first
indican que falló la fusión y que hay conflictos en esos archivos. Si ha decidido que, después de todo, cualquier fusión que intentaba hacer era una mala idea, puede volver a la normalidad con:
git reset --merge
Sin embargo, de lo contrario deberías resolver esos conflictos de fusión, como se describe en el manual de git .
Una vez que haya solucionado eso mediante cualquiera de las técnicas, debería poder pagar la 9-sign-in-out
sucursal. El problema con simplemente cambiar el nombre 9-sign-in-out
a master
, como se sugiere en la respuesta de wRAR, es que si ha compartido su rama maestra anterior con alguien, esto le creará problemas, ya que si el historial de las dos ramas divergió, publicará reescrito. historia.
Básicamente, lo que desea hacer es fusionar la rama de su tema 9-sign-in-out
pero master
mantener exactamente las versiones de los archivos en la rama de tema. Podrías hacer esto con los siguientes pasos:
# Switch to the topic branch:
git checkout 9-sign-in-out
# Create a merge commit, which looks as if it's merging in from master, but is
# actually discarding everything from the master branch and keeping everything
# from 9-sign-in-out:
git merge -s ours master
# Switch back to the master branch:
git checkout master
# Merge the topic branch into master - this should now be a fast-forward
# that leaves you with master exactly as 9-sign-in-out was:
git merge 9-sign-in-out
Cambiar rama, descartando todas las modificaciones locales
git checkout -f 9-sign-in-out
Cambie el nombre de la rama actual a maestra, descartando la rama actual
git branch -M master
como se sugiere en git status
,
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: a.jl
both modified: b.jl
Solía git add
terminar la fusión y luego git checkout
funciona bien.