Git Расширение для Visual Studio

Я новичок в git, и я использую расширение git для Visual Studio. Когда другие члены команды фиксируют изменения, иногда, когда я пытаюсь синхронизировать проект, я могу видеть входящие коммиты, но проект не синхронизируется, и появляется ошибка ниже.

Ошибка была вызвана libgit2. Категория = 21 (MergeConflict). 2 незафиксированные изменения будут перезаписаны слиянием

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

Ответ 1

Сообщение о незафиксированных изменениях, а не о реальных конфликтах слияния. Научитесь НЕ сливаться или делать какие-либо причудливые вещи git с незафиксированными изменениями. Перед операцией зафиксируйте изменения или запишите их. Даже если конфликт подобным образом не помечен, скорее всего это не то, что вы действительно хотели сделать.

В GE есть возможность показать изменения рабочей последовательности (игнорируйте "медленное" предупреждение, если вы не работаете с гигантским репо и регулярно имеете сотни измененных файлов) и привыкайте к нему в режиме просмотра. Также кнопка "Commit" показывает счетчик, который должен быть 0, когда вы вызываете слияние.

Если в середине вашей работы вы хотите синхронизировать (и подумали еще раз и по-настоящему уважительной причине, честно), используйте stash, затем потяните (или перебазируйте), и после этого выполните разблокировку вашей работы.

Конфликты с реальным слиянием лучше всего обрабатывать с помощью инструментов визуального слияния, вы можете попробовать tortoisemerge или мой любимый diffgerge sourcegear. Kdiff3, поставляемый с GE, хорош, чтобы оглядываться вокруг, но не так хорош в разрешении, если только вам не нужно выбирать кандидатов буквально. GE автоматически разрешает разрешение конфликтов.

Ответ 2

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

Между тем, он "вернул" свое изменение (без разговора со мной), а затем попросил меня подтолкнуть меня к изменениям. Я сказал ему, что отбросил свои изменения, поэтому он вернул его возвращение (в итоге два коммита).

Когда я отправился на другое изменение (совершенное на свое местное репо без каких-либо незавершенных изменений), он подтолкнул как возврат его изменений, так и повторное обращение, и я получил сообщение выше.

Решение было довольно простым, я использовал меню "Действия", чтобы открыть командную строку и выпустил git pull. Это сработало правильно и создало слияние для меня с его реверсированием и повторным обращением.

Да, он мог бы (insert incomprehensible git-gibberish here) вместо этого, но он этого не сделал, поэтому сосать его ботаники. Он работает, мы двигаемся дальше.

Здесь представлен элемент обратной связи VS по этой проблеме: http://connect.microsoft.com/VisualStudio/feedbackdetail/view/955248/git-merge-fails-claiming-uncommited-change-would-be-overwritten-by-merge-ssh-mergeconflict

Ответ 3

Иногда git pull недостаточно... (если вы получаете "Уже обновлено".)

Возможно, потребуется выполнить слияние из командной строки:

В Visual Studio (2015, Update 3 для меня) в Team Explorer, Branches, Actions, Open In Command Prompt, затем:

git merge NameOfBranchBeingMergedFrom

Затем закройте это окно и сделайте все остальное (Merge Conflicts и т.д.) из VS