Erreurs de fusion Git

264

J'ai une branche git appelée 9-sign-in-outavec du code fonctionnant parfaitement, et je veux la transformer en maître. Je suis actuellement sur la branche master.

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

J'essaie de passer à la 9-sign-in-outbranche, mais cela ne me permet pas de:

$ 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

Une idée comment puis-je ignorer toutes les erreurs de branche principale et transformer la 9-sign-in-outbranche en maître? Peut-être git rebase ? Mais je ne veux pas perdre le code en 9-sign-in-outbranche.

Sayanee
la source
Voulez-vous dire que vous ne voulez pas perdre votre code non validé en 9 déconnexion?
Mauvis Ledford
@Mauvis: J'ai déjà engagé mes codes dans la branche 9-déconnexion.
Sayanee

Réponses:

531

Cela vaut la peine de comprendre ce que ces messages d'erreur signifient - needs mergeet d' error: you need to resolve your current index firstindiquer qu'une fusion a échoué et qu'il y a des conflits dans ces fichiers. Si vous avez décidé que la fusion que vous tentiez de faire était une mauvaise idée après tout, vous pouvez remettre les choses à la normale avec:

git reset --merge

Cependant, sinon, vous devez résoudre ces conflits de fusion, comme décrit dans le manuel git .


Une fois que vous avez résolu cela par l'une ou l'autre technique, vous devriez pouvoir vérifier la 9-sign-in-outsuccursale. Le problème avec juste de renommer votre 9-sign-in-outà master, comme suggéré dans la réponse de WRAR est que si vous avez partagé votre branche principale précédente avec quelqu'un, cela va créer des problèmes pour eux, car si l'histoire des deux branches divergeaient, vous publierez réécrit l'histoire.

Essentiellement, ce que vous voulez faire, c'est fusionner votre branche de rubrique 9-sign-in-outdans, mastermais conserver exactement les versions des fichiers dans la branche de rubrique. Vous pouvez le faire avec les étapes suivantes:

# 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
la source
1
Mark, j'ai finalement compris ce que vous disiez après avoir à nouveau fusionné l'erreur. J'ai cependant cette erreur ::::::::::::: Sayanee: twitter sweska $ git checkout master error: Vos modifications locales dans les fichiers suivants seront écrasées par checkout: webrat.log S'il vous plaît, validez vos modifications ou les cacher avant de pouvoir changer de branche. Abandon :::::::::::::::::: de toute façon, pour utiliser le webrat.log dans la branche et le faire fusionner avec le maître?
Sayanee
1
@Sayanee: c'est une erreur différente, résultant de circonstances différentes, et il serait préférable de poser une nouvelle question à ce sujet si vous en êtes confus. (En bref, cependant, git vous empêche de changer de branche car cela écraserait les modifications non engagées webrat.log.)
Mark Longair
J'avais l'habitude de rm le tout et de m'allonger. Mais c'est mieux.
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
la source
3
Je pense que c'est beaucoup plus propre de réinitialiser la fusion comme Mark l'a suggéré ci-dessous au lieu de forcer le paiement.
Thomas
8

comme suggéré dans git status,

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

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

J'avais l'habitude git addde terminer la fusion, puis git checkoutfonctionne très bien.

Jingpeng Wu
la source
1

mon problème était (master | REBASE 1/1)

cette commande a fonctionné pour moi

 git rebase --skip
Muhammad Shoaib Murtaza
la source
-6

git commit -m "Conflit fixe maître fusionné."

Parasp2008
la source