web-dev-qa-db-fra.com

Erreurs de fusion Git

J'ai une branche git appelée 9-sign-in-out avec un code qui fonctionne 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 branche 9-sign-in-out, 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

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

241
Sayanee

Il est utile de comprendre la signification de ces messages d'erreur - needs merge et error: you need to resolve your current index first indiquent qu'une fusion a échoué et qu'il existe des conflits entre 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 devriez résoudre ces conflits de fusion, comme décrit dans le manuel de git .


Une fois que vous avez résolu ce problème par l’une ou l’autre technique, vous devriez pouvoir extraire la branche 9-sign-in-out. Le problème avec le simple changement de nom de votre 9-sign-in-out en master, comme suggéré dans la réponse de wRAR est que si vous avez partagé votre branche principale précédente avec qui que ce soit, cela leur posera des problèmes. , car si l’histoire des deux branches est divergente, vous allez publier l’histoire réécrite.

Ce que vous voulez faire est essentiellement de fusionner votre branche de sujet 9-sign-in-out en master tout en conservant les versions des fichiers dans la branche de sujet. Vous pouvez le faire en procédant comme suit:

# 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
482
Mark Longair
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
39
wRAR

comme suggéré dans git status,

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

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

J'ai utilisé git add pour terminer la fusion, puis git checkout fonctionne bien.

5
Jingpeng Wu