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

Git - ошибки после конфликтов слияния во время приставки

Оригинальное название: git - обновить все файлы, которые не были изменены

В настоящее время я пытаюсь обновить все файлы в репозитории git, которые не были изменены. Скажем, например, у меня есть:

  • test1.py
  • test2.py

test1.py был изменен локально, в то время как оба файла были удалены удаленно. Теперь я попробовал:

git stash
git pull
git stash pop

который восстановил мои изменения, дав мне предупреждение, что мне нужно объединить test1.py. Все идет нормально. Проблема возникает, когда я пытаюсь повторить один и тот же процесс (после того, как оба файла снова были удалены). git теперь говорит

unmerged (6b126638f7c63aa648609afa60ab972a2403502b)
fatal: git-write-tree: error building trees
Cannot save the current index state

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

4b9b3361

Ответ 1

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

Насколько я знаю, способ сделать это:

git add <file>        # stage the resolved version, which marks it as resolved
git reset HEAD <file> # unstage the changes, leaving the resolution just in the work tree

Кажется, должен быть способ сделать оба сразу с update-index, но это не очевидно для меня из быстрого взгляда. (Но опять же, для фактических конфликтов слияния, вы никогда не хотите отмечать конфликт как разрешенный без постановки контента, это просто для stashes, что это возникает.)

И, как говорит VonC в своем ответе, если это повторится, вы можете легко увидеть, какие вещи имели конфликты слияния при применении stash с помощью git status. Они будут перечислены красным цветом (если у вас есть цвет) и скажите unmerged (или, может быть, deleted by us/them, если это был конфликт удаления/изменения).

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

Ответ 2

Это означает, что ваш второй тайник не работает из-за еще неразрешенного слияния.
См. Этот вопрос SO, который иллюстрирует одно и то же сообщение об ошибке в тире.

Этот поток подтверждает, что дерево не может содержать несвязанные файлы.

У вас есть дерево с несвязанными записями.
Почему вы не рассматриваете проблему и не решаете ее?
Простой "git status" должен показать вам, что такое несвязанный записей. Простой взгляд на эти файлы должен показывать маркеры конфликтов.

Устранить проблему, зафиксировать, продолжить.