Errores de fusión de Git

264

Tengo una rama git llamada 9-sign-in-outcon un código que funciona perfectamente y quiero convertirla en la maestra. Actualmente estoy en la rama maestra.

$ git branch
9-sign-in-out
* master

Estoy tratando de cambiar a 9-sign-in-outrama, 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-outrama en maestra? Tal vez git rebase ? Pero no quiero perder el código en la 9-sign-in-outrama.

Sayanee
fuente
¿Quiere decir que no quiere perder su código no comprometido en 9-sign-in-out?
Mauvis Ledford
@Mauvis: ya comprometí mis códigos en la sucursal 9-sign-in-out.
Sayanee

Respuestas:

531

Vale la pena entender qué significan esos mensajes de error, needs mergee error: you need to resolve your current index firstindicar que una fusión falló y que hay conflictos en esos archivos. Si después de todo ha decidido que cualquier combinación que intentara hacer era una mala idea, puede volver a la normalidad con:

git reset --merge

Sin embargo, de lo contrario, debe resolver esos conflictos de fusión, como se describe en el manual de git .


Una vez que haya lidiado con eso mediante cualquiera de las técnicas, debería poder pagar la 9-sign-in-outrama. El problema con solo cambiarle el nombre 9-sign-in-outa master, como se sugiere en la respuesta de wRAR, es que si ha compartido su rama maestra anterior con alguien, esto creará problemas para ellos, ya que si el historial de las dos ramas divergió, publicará reescritas historia.

Esencialmente lo que quiere hacer es fusionar su sucursal tema 9-sign-in-outen masterpero exactamente mantener las versiones de los archivos en la rama tema. Puede 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
Mark Longair
fuente
1
Mark, finalmente entendí lo que estabas diciendo después de que recibí el error nuevamente para fusionarme ahora. Sin embargo, tengo este error ::::::::::::: Sayanee: twitter sweska $ git checkout error principal: sus cambios locales en los siguientes archivos se sobrescribirán al finalizar la compra: webrat.log Por favor, confirme sus cambios o guárdelos antes de que pueda cambiar de rama. Abortar ::::::::::::::::: de cualquier manera, ¿utilizar el webrat.log en la rama y hacer que se fusione con el maestro?
Sayanee
1
@Sayanee: ese es un error diferente, que surge de diferentes circunstancias, y sería mejor hacer una nueva pregunta al respecto si te confunde. (En pocas palabras, sin embargo, está git le para de ramas de conmutación ya que ello sobrescribir los cambios no confirmados en webrat.log.)
Marcos Longair
Solía ​​simplemente arreglar todo y reclinarme. Pero esto es mejor.
sudo
43
git checkout -f 9-sign-in-out # change branch, discarding all local modifications
git branch -M master # rename the current branch to master, discarding current master
wRAR
fuente
3
Creo que es mucho más limpio restablecer la fusión como Mark sugirió a continuación en lugar de forzar el pago.
Thomas
8

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 addterminar la fusión, luego git checkoutfunciona bien.

Jingpeng Wu
fuente
1

mi problema fue (master | REBASE 1/1)

este comando funcionó para mí

 git rebase --skip
Muhammad Shoaib Murtaza
fuente
-6

git commit -m "Conflicto maestro resuelto solucionado".

Parasp2008
fuente