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.


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

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

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.



En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.