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 ответа:
это конфликт маркеров. Вы все еще находитесь в процессе слияния, но были некоторые части, которые 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.