git-ошибки после конфликтов слияния во время stash pop

Оригинальное название: 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

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

2 ответов


вы разрешили конфликт в своем файле (возможно? см. сноску), но 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 но это не для меня это очевидно с первого взгляда. (Но опять же, для реальных конфликтов слияния вы никогда хотите пометить конфликт как разрешенный без постановки содержимого; это только для тайников, что это возникает.)

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

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


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

этой резьба подтверждает дерево не может содержать несвязанные файлы.

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

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