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
.
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
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
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.