Git merge marques de la Tête gauche dans Mes fichiers

j'ai essayé de fusionner un fichier dans la ligne de commande en utilisant Git, quand un message d'erreur est apparu me disant que la fusion a été avortée.

je pensais que c'était la fin, mais j'ai réalisé qu'il y avait des gitmarks dans mes fichiers. Comme ceci:

start =
    expression

validchar = 
    [0-9a-zA-Z_?!+\[email protected]#$%^&*/.]

integer = 
<<<<<<< HEAD
    digits:[0-9]+
        { return digits.join(""); }
=======
    sign:"-"* digits:[0-9]+
        { return sign + digits.join(""); }
>>>>>>> gh-pages

les fichiers n'ont pas été édités par moi et montrent les lignes insérées avec:

  • tête après les signes ( <<<<<<< HEAD )
  • lignes de changed code
  • une chaîne de signes égaux ( ======= )
  • la nouvelle version du code
  • une autre ligne commençant par plus grand que les signes et le nom de la branche ( >>>>>>> gh-pages )

le pire, c'est que le contenu du fichier n'est plus en ordre. Est-ce que quelqu'un sait comment j'ai ramené ces fichiers à la normale, et les changements que j'ai faits dans la branche gh ont fusionné dans la branche principale?

67
demandé sur lowerkey 2012-05-18 21:41:33
la source

4 ответов

Ceux sont marqueurs de conflit . Vous êtes encore en train de fusionner, mais il y a des parties que Git ne pourrait pas fusionner automatiquement. Vous aurez besoin de modifier à la main ces parties à ce que vous voulez qu'elles soient et ensuite de propager les résultats.


par exemple, dans votre cas particulier, vous voudriez probablement résoudre comme ceci (note - les flèches/texte sur la droite sont juste mes notes, pas quelque chose vous taperiez 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 sous...

integer = 
    sign:"-"* digits:[0-9]+
        { return sign + digits.join(""); }
75
répondu Amber 2017-05-23 15:34:19
la source

commencez par "statut git" pour voir ce que vous avez. Si vous avez avorté une fusion (ou si une fusion a avorté) et que vous avez des fichiers en conflit dans le répertoire de travail, alors quelque chose a mal tourné. Le statut Git vous dira où vous êtes. Après cela, vous avez un certain nombre d'options. Vous devez résoudre la propagation de la fusion manuellement, ce qui peut être difficile, ou en utilisant un outil comme:

git mergetool

l'outil de fusion fonctionnera si vos fichiers sont listés comme ayant besoin d'un fusionner.

vous pouvez également effectuer l'un des:

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 "git status" montre les fichiers comme ayant besoin d'une fusion.

enfin, vous avez toujours l'option de:

git reset --hard   # sounds like --hard is what you need but check other options
19
répondu GoZoner 2017-05-23 15:02:22
la source

toutes les réponses sont correctes mais si vous voulez Autoremove toutes les marques de conflit et que vous voulez autochange les fichiers pour garder la tête, alors vous pouvez créer votre propre script bash comme: -

Exemple De Script:

# vim /usr/sbin/solve.git

(Ajouter Après)

#!/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

& il suffit de l'exécuter dans votre git repo / path à résoudre:

$ cd <path_to_repo>

$ solve.git

avis:- les extensions de fichiers mentionnées ci-dessus sont php,css,js,html,svg & txt.

1
répondu Mr. Pundir 2017-03-02 09:26:35
la source

dans Atom j'ai eu le problème que certains fichiers n'ont pas enregistré les conflits de fusion résolus sur le lecteur, donc j'ai dû cliquer manuellement "enregistrer". M'a fallu un certain temps pour comprendre.

0
répondu Timar Ivo Batis 2018-04-06 00:57:29
la source