J'ai essayé de fusionner un fichier dans la ligne de commande en utilisant Git, lorsqu'un message d'erreur est apparu me disant que la fusion avait été annulée.
Je pensais que c'était la fin, mais j'ai ensuite réalisé qu'il y avait des marques git dans mes fichiers. Ainsi:
start =
expression
validchar =
[0-9a-zA-Z_?!+\-=@#$%^&*/.]
integer =
<<<<<<< HEAD
digits:[0-9]+
{ return digits.join(""); }
=======
sign:"-"* digits:[0-9]+
{ return sign + digits.join(""); }
>>>>>>> gh-pages
Les fichiers ont été édités pas par moi et montrent les lignes insérées avec:
<<<<<<< HEAD
)=======
)>>>>>>> gh-pages
)Le pire est que le contenu du fichier n'est plus en ordre. Est-ce que quelqu'un sait comment je récupère ces fichiers et comment les modifications que j'ai apportées à la branche gh ont été fusionnées dans la branche maître?
Ce sont marqueurs de conflit }. Vous êtes encore en train de fusionner, mais certaines parties ne pouvaient pas être fusionnées automatiquement par Git. Vous allez devez éditer ces parties à la main en ce que vous souhaitez qu'elles soient, puis valider les résultats.
Par exemple, dans votre cas particulier, vous voudrez probablement le résoudre comme ceci (remarque - les flèches/le texte à droite ne sont que mes notes, pas quelque chose que vous tapez dans le fichier):
integer =
<<<<<<< HEAD <-+ remove the bits here
digits:[0-9]+ |
{ return digits.join(""); } |
======= <-+
sign:"-"* digits:[0-9]+
{ return sign + digits.join(""); }
>>>>>>> gh-pages <-- and this
et ainsi vous sauvegarderiez le fichier en tant que ...
integer =
sign:"-"* digits:[0-9]+
{ return sign + digits.join(""); }
Absolument commencer par «statut git» pour voir ce que vous avez. Si vous avez annulé une fusion (ou si une fusion a été annulée) et que vous avez des fichiers en conflit dans le répertoire de travail, un problème est survenu. Le statut Git vous dira où vous êtes. Après cela, vous avez un certain nombre d'options. Vous devez résoudre le commit de fusion soit manuellement, ce qui peut être difficile, soit en utilisant un outil tel que:
git mergetool
L'outil de fusion fonctionnera si vos fichiers sont répertoriés comme nécessitant une fusion.
Vous pouvez également effectuer l'une des actions suivantes:
git checkout --ours -- /path/to/conflicted-file # this is probably the one you want
git checkout --theirs -- /path/to/conflicted-file
Vous pouvez voir les différentes versions en utilisant la syntaxe: 1: filename. Voir ici pour une explication. Mais tout ce qui précède suppose que "statut git" indique que les fichiers nécessitent une fusion.
Enfin, vous avez toujours la possibilité de:
git reset --hard # sounds like --hard is what you need but check other options
Toutes les réponses sont exactes, mais si vous souhaitez supprimer automatiquement toutes les marques de conflit et que vous souhaitiez autochanger les fichiers pour conserver HEAD, vous pouvez créer votre propre script bash comme: -
Exemple de script:
# vim /usr/sbin/solve.git
(Ajouter suite)
#!/bin/bash
for f in $(grep -Rl '^>>>>>>> ' --include="*.php" --include="*.css" --include="*.js" --include="*.html" --include="*.svg" --include="*.txt" .)
do
sed -i -e '/^=======/,/^>>>>>>> /d' -e '/^<<<<<<< /d' $f
sed -i -e '/^>>>>>>> /d' $f
echo "$f Fixed"
done
git add . ; git commit -am "[+] Resolved on `date` from `hostname` by `whoami`" --no-verify
# chmod 755 /usr/sbin/solve.git
& lancez-le simplement dans votre dépôt/chemin GIT pour résoudre:
$ cd <path_to_repo>
$ solve.git
Avis: - Les extensions de fichiers mentionnées ci-dessus sont php, css, js, html, svg & txt.
Je viens de cette question . Et je voulais une méthode automatisée pour fusionner les fichiers à moitié fusionnés, au lieu de les éditer manuellement (comme suggéré dans d'autres réponses, ce que je ne suis pas très à l'aise}. Alors voici ce que j'ai fini par faire via netbeans, mais je peux aussi le faire en ligne de commande.
Maintenant, gardez à l'esprit que cela ne fonctionne que si, immédiatement après le merge->add->commit
, vous vous êtes rendu compte que vous vous êtes trompé et que vous souhaitez reprendre le processus.
STEP 1: Réinitialiser un commit précédent.
git reset --hard a992a93f9312c6fa07c3a1b471c85e9fbf767d0e
STEP 2: Re-Try Fusionner la branche
git merge --ff Origin/feature/YOUR-Branch_here
À ce stade, la fenêtre de fusion apparaîtra si vous utilisez une interface graphique. et vous pouvez ensuite procéder comme d'habitude.
Dans Atom, j’ai eu le problème suivant: certains fichiers ne sauvegardaient pas les conflits de fusion résolus sur le lecteur, je devais donc cliquer manuellement sur "enregistrer" .