Erros de mesclagem do Git

264

Eu tenho um ramo git chamado 9-sign-in-outcom um código que funciona perfeitamente e quero transformá-lo no mestre. Atualmente, estou no ramo principal.

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

Estou tentando mudar para o 9-sign-in-outramo, mas isso não 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

Alguma idéia de como posso ignorar todos os erros de ramificação mestre e transformar a 9-sign-in-outramificação em mestre? Talvez git rebase ? Mas não quero perder o código na 9-sign-in-outramificação.

Sayanee
fonte
Você quer dizer que não deseja perder seu código não confirmado na entrada e saída de 9?
Mauvis Ledford 15/05
@Mauvis: Eu já cometi meus códigos no ramo 9 de entrada e saída.
Sayanee

Respostas:

531

Vale a pena entender o significado dessas mensagens de erro - needs mergee error: you need to resolve your current index firstindicar que uma fusão falhou e que há conflitos nesses arquivos. Se você decidiu que qualquer fusão que você estava tentando fazer era uma péssima ideia, você pode colocar as coisas de volta ao normal com:

git reset --merge

No entanto, caso contrário, você deve resolver esses conflitos de mesclagem, conforme descrito no manual do git .


Depois de lidar com isso por qualquer uma das técnicas, você poderá fazer o checkout do 9-sign-in-outramo. O problema de renomear seu nome 9-sign-in-outpara master, como sugerido na resposta da wRAR é que, se você compartilhou seu ramo mestre anterior com alguém, isso criará problemas para eles, pois se o histórico dos dois ramos divergir, você publicará reescrito história.

Essencialmente, o que você quer fazer é mesclar seu ramo tópico 9-sign-in-outem mastermas exatamente manter as versões dos arquivos no ramo tópico. Você pode fazer isso com as seguintes etapas:

# 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
fonte
1
Mark, finalmente entendi o que você estava dizendo depois que o erro novamente foi mesclado agora. No entanto, estou tendo este erro :::::::::::::: Sayanee: twitter sweska $ git erro de checkout master: Suas alterações locais nos seguintes arquivos seriam substituídas pelo checkout: webrat.log Por favor, confirme suas alterações ou as esconda antes de poder trocar de ramificação. Abortando ::::::::::::::::: qualquer forma, para o usuário do webrat.log no ramo e torná-lo fundir-se com o mestre?
Sayanee 16/05
1
@Sayanee: esse é um erro diferente, resultante de circunstâncias diferentes, e seria melhor fazer uma nova pergunta sobre isso, se você estiver confuso com isso. (Resumidamente, porém, git é que você parar de galhos de comutação desde que substituir as alterações não confirmadas no webrat.log.)
Mark Longair
Costumava apenas refazer a coisa toda. Mas isso é melhor.
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
fonte
3
Eu acho que é muito mais limpo redefinir a mesclagem, como Mark sugeriu abaixo, em vez de forçar o checkout.
Thomas
8

como sugerido em git status,

Unmerged paths:                                                                                                                                
(use "git add <file>..." to mark resolution)                                                                                                 

    both modified:   a.jl                                  
    both modified:   b.jl

Eu costumava git addterminar a fusão, depois git checkoutfunciona bem.

Jingpeng Wu
fonte
1

meu problema foi (mestre | REBASE 1/1)

esse comando funcionou para mim

 git rebase --skip
Muhammad Shoaib Murtaza
fonte
-6

git commit -m "Conflito fixo mestre mesclado."

Parasp2008
fonte