Подтвердить что ты не робот

Git объединить левые метки HEAD в моих файлах

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

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

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

Файлы были отредактированы не мной, а отображаемые строки вставлены с помощью:

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

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

4b9b3361

Ответ 1

Это маркеры конфликтов. Вы все еще в процессе слияния, но были некоторые части, которые 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(""); }

Ответ 2

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

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

Ответ 3

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

Пример Script:

# 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 для разрешения:

$ cd <path_to_repo>
$ solve.git

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

Ответ 4

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

Ответ 5

Я исхожу из этого вопроса. И я хотел какой-то автоматизированный метод объединения половинных файлов вместо ручного редактирования файлов (как это предлагалось в других ответах, что мне не очень удобно). Итак, вот что я в итоге сделал через netbeans, но можно сделать и через командную строку.

Теперь, имейте в виду, это работает, только если сразу после merge->add->commit вы поняли, что все испортили, и хотите повторить процесс.

ШАГ 1: Сброс до предыдущего коммита.

git reset --hard a992a93f9312c6fa07c3a1b471c85e9fbf767d0e

ШАГ 2: Попробуйте объединить ветку

git merge --ff origin/feature/YOUR-Branch_here

На этом этапе вам будет предложено окно слияния, если вы используете графический интерфейс. и тогда вы можете продолжить как обычно.