git - ошибки после конфликтов слияния во время загрузки - PullRequest
21 голосов
/ 13 мая 2011

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

27 голосов
/ 13 мая 2011

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

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

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

2 голосов
/ 13 мая 2011

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

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

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

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

...