git pull из чистой директории имеет конфликты слияния - PullRequest
13 голосов
/ 28 июня 2011

Я сделал git pull из моего апстрима в чистой рабочей директории, и это вызывает конфликты слияния.Я потратил около часа на ручную настройку, думая, что я что-то напортачил, и это случилось снова.

Это ошибка в git?Я мало что знаю об этом, поэтому я полностью согласен с тем, что я сделал это с собой.

Вот мой усеченный вывод (это происходит примерно с 9 файлами, но я хотел сэкономить место, и имена файлов былиизменено для защиты невинных):

$ git status
# On branch master
nothing to commit (working directory clean)
$ git pull
Auto-merged xxxx/xxxx/xxxx.xxx
CONFLICT (content): Merge conflict in xxxx/xxxx/xxxx.xxx
Automatic merge failed; fix conflicts and then commit the result.

Я использую Solaris 11 Express с пакетом git по умолчанию.

$ uname -a
SunOS xxxx 5.11 snv_151a i86pc i386 i86pc Solaris
$ git --version
git version 1.5.6.5
$ pkg list git
NAME (PUBLISHER)                              VERSION         STATE      UFOXI
developer/versioning/git                      1.5.6.5-0.151.0.1 installed  -----

Я нашел этот вопрос: Сбой Git pull:У вас есть неустановленные изменения.Состояние Git: ничего не коммитить (рабочий каталог очищен) , который кажется наиболее близким, но имеет неудовлетворительный ответ.

Как мне пройти через это, не удаляя весь мой репозиторий и не создавая новый клон?

Ответы [ 3 ]

20 голосов
/ 28 июня 2011

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

Ваши варианты здесь в основном сводятся к:

  1. Исправьте конфликты. Вы говорите git, как обрабатывать конфликтующие изменения, и идете дальше.
  2. Перебазируйте и исправьте конфликты с помощью git pull --rebase. Это не сильно отличается от 1, но если ваши изменения никогда не публиковались (то есть они никогда не публиковались), это может дать вам более чистую (линейную) историю.
  3. Откажитесь от локальных изменений и используйте пульты, набрав git reset --hard remotename/remotebranch. Это приведет к потере любых изменений, которые вы зафиксировали локально, но не были перенесены в другое место.
0 голосов
/ 07 января 2018

Добавление к ответу bdonlan может произойти, когда у вас есть какие-то коммиты (в вашем локальном репозитории), но удаленный репозиторий еще впереди (был достигнут некоторый прогресс по сравнению с вашим локальным коммитом) файлы).

Я просто застрял, когда не мог ни толкать, ни тянуть из-за этих конфликтов.

Попытка сделать ' rebase ' или ' reset --hard ' безуспешно.

Единственное решение, которое сработало для меня, это вернуться на один коммит и вытащить;

Выполните следующие шаги:

Предупреждение: это разрушительная операция, которая приведет к потере последних изменений в этом коде, поэтому сначала сделайте резервную копию своих изменений!

  1. Используйте ' git log ' в вашем локальном репозитории и сравните его с журналом коммитов на удаленном компьютере - чтобы понять, какой из ваших коммитов не был передан
  2. Используйте ' git reset --hard ', чтобы вернуться в последний раз, когда ваш код помещался в удаленный репозиторий (я использовал ' git reset --hard HEAD ^ ' для сознательно потерять мой предыдущий коммит)
  3. Теперь ' git pull ' будет работать; используйте его для получения последнего кода с удаленного сервера
0 голосов
/ 28 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...