2013-06-28 4 views
10

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

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

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

ответ

6

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

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

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

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

+1

Выберите хорошую практику работы, чтобы избежать этой проблемы. Всегда выполняйте свою работу над ветвью функций. tch на ведущую ветвь, чтобы синхронизировать, когда вы готовы к объединению, после того как мастер обновлен, объедините свою ветку функций. Или вы можете переустановить ветвь вашей функции против мастера, а затем слить, если вы предпочитаете быстрый рабочий процесс стиля. Но в основном - как указано в этом ответе. – patthoyts

3

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

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

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

Решение было довольно простым, я использовал меню «Действия», чтобы открыть командную строку и выпустил 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

+0

git reset - hard, работал для меня (проблема, которую я, возможно, был вызван незафиксированными изменениями в той же ветке, сделанной мной на другом компьютере, VM). – learnerplates

1

Иногда git pull не хватает ... (если вы получаете «уже в курсе.«)

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

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

git merge NameOfBranchBeingMergedFrom 

Затем закройте это окно и сделайте все остальное (слияние конфликтов и т. Д.) С VS