2011-05-15 36 views
179

Tengo una rama git llamada 9-sign-in-out con un código perfectamente funcional, y quiero convertirlo en el maestro. Actualmente estoy en la rama principal.Git merge errors

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

Estoy tratando de cambiar a 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 rama principal y gire a la rama en 9-sign-in-out ¿el maestro? Tal vez git rebase? Pero no quiero perder el código en la rama 9-sign-in-out.

+0

¿Quiere decir que no quiere perder su código sin procesar en 9-inicio de sesión-salida? –

+0

@Mauvis: Ya he confirmado mis códigos en la rama 9-iniciar sesión. – Sayanee

Respuesta

362

Vale la pena entender lo que significan los mensajes de error - needs merge y error: you need to resolve your current index first indican que una fusión fracasó, y que hay conflictos en esos archivos. Si usted ha decidido que cualquier cosa combinación que estaba tratando de hacer era una mala idea después de todo, puede poner las cosas vuelvan a la normalidad con:

git reset --merge 

Sin embargo, de lo contrario debe resolver los conflictos de fusión, as described in the git manual.


Una vez que has tratado con que por una u otra técnica que debe ser capaz de obtener de la rama 9-sign-in-out. El problema con el cambio de nombre de 9-sign-in-out a master, como se sugiere en wRAR's answer 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 divergiera, publicará historia reescrita

Básicamente, lo que quiere hacer es fusionar su rama de tema 9-sign-in-out en master pero mantener exactamente las versiones de los archivos en la rama de tema. Usted 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 
+1

Mark, finalmente entendí lo que estaba diciendo después de que obtuve el error nuevamente para fusionarme ahora. Sin embargo, tengo este error ::::::::::::: Sayanee: twitter sweska $ git checkout master error: Sus cambios locales a los siguientes archivos se sobrescribirán con el pago: \t webrat.log Por favor, confirme sus cambios o guárdelos antes de poder cambiar de rama. Abortar ::::::::::::::::: de cualquier forma, para usar 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 si estás confundido. (En resumen, sin embargo, git te impide cambiar de rama ya que eso sobrescribiría los cambios no confirmados en 'webrat.log'). –

+1

¡¡Genial !! Ahora eso lo explica todo :) ¡Gracias por la explicación! – Sayanee

31
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 
+3

Creo que es mucho más limpio restablecer la fusión como Mark sugiere a continuación en lugar de forzar el pago. – Thomas

0

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 para terminar la fusión, a continuación, git checkout funciona bien.