27 votes

Problème de fusion des modifications en amont dans ma branche

Je vais avoir de la difficulté à la fusion amont d'un changement dans ma branche, gardez à l'esprit que je suis encore un débutant dans l'utilisation de Git. Je suis en cours d'exécution dans les conflits tout en essayant de fusionner les changements en amont de retour dans ma branche et je ne suis pas sûr de la façon de les résoudre. Voir ci-dessous pour les détails de exactement ce que j'ai essayé.

J'ai créé mon propre fourchette. J'ai cloné il. J'ai fait des modifications à la direction générale sur ma fourche, commis, et poussé. Mais alors la principale fourche mis à jour, et j'ai essayé de mettre à jour ma propre fourche par la fusion en amont de la sorte:

$ cd repo-name
$ git remote add upstream git://github.com/username/repo-name.git
$ git fetch upstream
$ git merge upstream/master

La fusion dit qu'il y a un problème avec un fichier et de l'auto-fusion ne fonctionne pas. Il me dit de le réparer moi-même et de re-fusionner. Donc, je suis allé à l' (en amont) dépôt sur github des principaux fourche et copié tout le code du nouveau fichier dans le fichier sur ma fourchette, et essayé de fusionner à nouveau. Ensuite, git me donne cette erreur:

fatal: "fusionner" n'est pas possible parce que vous avez désinstallé fichiers. S'il vous plaît, de les corriger dans le travail de l'arbre, et ensuite utiliser git add/rm " comme approprié pour marquer la résolution et de faire un commit, ou utilisez "git commit -a".

Est-il un argument que je vais la laisser sortir? Suis-je en train de faire quelque chose de stupide? Que faut-il dire par "non fusionné les fichiers?" N'est-ce pas le point de l'ensemble de la fusion pour fusionner des fichiers? Dois-je engager mes modifications avant je les fusionner? (Je vais essayer ça tout de suite...)

21voto

Let_Me_Be Points 16797

Ce que vous voyez signifie que la fusion automatique n'a pas pu résoudre les conflits dans les fichiers. Vous devez résoudre ces conflits manuellement. Exécutez git mergetool ou git gui .

8voto

cbare Points 1673

Le "git merge de la commande" tente d'apporter des changements à partir d'une autre branche sur le présent de la branche. Si la fusion est propre, ce qui signifie pas de conflits, il va commettre. Depuis votre fusion n'avoir de conflits, il n'a pas commis. Vous devez résoudre le conflit.

En tirant sur la copie de l'amont repo est une façon de le faire que par l'acceptation de l'amont que de pensions de la version. Vous pouvez le faire au sein de git à l'aide de "git checkout --le leur conflicting_file.txt"

L'édition du fichier pour l'obtenir dans la forme que vous voulez, c'est une autre manière.

Une fois qu'il est fixe, vous devez les ajouter à l'aide de "git add conflicting_file.txt" puis valider. Ensuite, votre copie de travail est propre et prêt pour plus de piratage. Bonne chance.

5voto

Jakub Narębski Points 87537

Dans Git, il y a des cas de fusion refuse même de commencer afin de protéger vos changements locaux. Cela peut se produire dans deux cas:

  • Vous avez des modifications non validées en vous référentiel qui entrent en conflit avec fusion. Le git va refuser d'effectuer une fusion avec le message suivant:

    erreur: Vos changements locaux pour les fichiers suivants seraient remplacées par de fusion:
    foo
    S'il vous plaît, valider vos modifications ou les ranger avant de fusionner.
    L'abandon de
    

    Ensuite, vous devez valider les modifications en premier (git commit -a ou git add + git commit), ou de les ranger à l'écart avec git stash save.

  • Vous êtes dans le milieu de certains inachevé de fusion-y de l'opération. Il y avait un conflit, par exemple

    Auto-fusion de foo
    CONFLIT (contenu): conflit de Fusion dans foo
    Automatique de fusion a échoué; résoudre les conflits puis de valider le résultat.
    

    et vous n'avez pas fini de résolution des conflits (par la modification des fichiers et de les marquer comme résolu avec git add, ou en utilisant un graphique de l'outil de fusion via git mergetool) et n'avait pas de créer un commit de fusion avec git commit -a, ou l'interruption de la fusion avec git reset --hard (REMARQUE: cela supprimera tous les vous des changements, et vous risquez de perdre le travail effectué sur la résolution des conflits!!!).

    Ou vous venez d'exécuter deuxième git merge trop vite, ou utilisé git merge au lieu de git commit pour créer une fusion de la validation.

    erreur: 'fusionner' est pas possible parce que vous avez désinstallé fichiers.
    astuce: Fixer dans le travail de l'arbre,
    astuce: puis utilisez "git add/rm" comme
    astuce: approprié à la marque de la résolution et de faire un commit,
    astuce: ou utilisez "git commit -a".
    fatal: la Sortie en raison d'un conflit non résolu.
    

    Résoudre les conflits, comme décrit par exemple dans le vieux Plaisir à remplir une fusion de l'article par Junio C Hamano et de finaliser la fusion avec git commit, ou de jeter une opération de fusion, ou de le ranger. Ensuite, si vous le but de créer ce deuxième fusion, vous pouvez le faire.

Note: par défaut, git-courant de l'invite du shell indique si vous êtes dans le milieu de la fusion, rebase ou l'application de correctifs (git am de l'opération). Vous pouvez également le configurer pour voir si le répertoire de travail est sale (différent de la version la plus récente, c'est à dire de la TÊTE).

1voto

Robin Green Points 12926

Après avoir résolu une fusion, vous devez utiliser git add pour ajouter les fichiers que vous avez modifiés à l'index, puis valider (comme l'indique le message). Cela dit de git "Oui, je veux vraiment faire ces changements".

N'oubliez pas, utilisez toujours git add avant de valider (normalement ou de valider une fusion), si vous utilisez l'interface de ligne de commande. Des interfaces comme magit peuvent simplifier cela pour vous, vous n'avez donc pas à vous soucier de taper "git add" à chaque fois.

0voto

alternative Points 7053

Exécutez git commit (après avoir ajouté les fichiers) la deuxième fois, pas git merge .

La résolution des conflits créera également des fichiers pour vous aider à fusionner. Voir aussi git mergetool .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X