Git merge левые метки головы в моих файлах


Я попытался объединить файл в командной строке с помощью Git, когда появилось сообщение об ошибке, сообщающее мне, что слияние было прервано.

Я думал, что это конец, но потом я понял, что в моих файлах есть gitmarks. Вот так:

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

файлы были отредактированы не мной и показывают строки, вставленные с:

  • голова после менее чем знаков (<<<<<<< HEAD)
  • строк измененного кода
  • строка знаков равенства (=======)
  • новая версия код
  • еще одна строка, начинающаяся с больше, чем знаки и название ветви (>>>>>>> gh-pages)

что еще хуже, что содержимое файла не в порядке. Кто-нибудь знает, как я возвращаю эти файлы в нормальное состояние, и изменения, которые я сделал в GH-ветке, слились в главную ветвь?

4 67

4 ответа:

это конфликт маркеров. Вы все еще находитесь в процессе слияния, но были некоторые части, которые Git не мог объединить автоматически. Вы будете нужно вручную редактировать эти части к тому, что вы хотите, чтобы они были, а затем зафиксировать результаты.


например, в вашем конкретном случае вы, вероятно, захотите решить его следующим образом (Примечание-стрелки / текст справа-это только мои заметки, а не то, что вы бы ввели в текст файл):

integer = 
<<<<<<< HEAD                                  <-+ remove the bits here
    digits:[0-9]+                               |
        { return digits.join(""); }             |
=======                                       <-+
    sign:"-"* digits:[0-9]+
        { return sign + digits.join(""); }
>>>>>>> gh-pages                              <-- and this

и таким образом вы сохраните файл как...

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

абсолютно начните с "git status", чтобы увидеть, что у вас есть. Если вы прервали слияние (или прервали слияние), и у вас есть конфликтные файлы в рабочем каталоге, то что-то пошло не так. Состояние ЖКТ скажет вам, где вы находитесь. После этого, у вас есть несколько вариантов. Вы должны решить слияние фиксации либо вручную, что может быть сложной задачей, или с помощью инструмента, как:

git mergetool

инструмент слияния будет работать, если ваши файлы перечислены как нуждающиеся в слиянии.

вы также можете выполнить одно из следующих значений:

git checkout --ours -- /path/to/conflicted-file       # this is probably the one you want
git checkout --theirs -- /path/to/conflicted-file

вы можете увидеть различные версии, используя :1:filename синтаксис. Смотрите здесь для объяснений. Но все вышеперечисленное предполагает, что "git status" показывает файлы как нуждающиеся в слиянии.

наконец, у вас всегда есть возможность:

git reset --hard   # sounds like --hard is what you need but check other options

все ответы верны, но если вы хотите автоматически перемещать все метки конфликтов и хотите автоматически изменять файлы, чтобы сохранить голову , то вы можете создать свой собственный скрипт bash, например : -

Пример:

# vim /usr/sbin/solve.git

(Добавлены)

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

& просто запустите его в своем git repo / path, чтобы решить:

$ cd <path_to_repo>
$ solve.git

Примечание:- вышеуказанные расширения файлов это php, css,js,html, svg и txt.

в Atom у меня была проблема, что некоторые файлы не сохранили разрешенные конфликты слияния на диске, поэтому мне пришлось вручную нажать "Сохранить". Мне потребовалось довольно много времени, чтобы понять.