Подтвердить что ты не робот

TFS/GIT в VS Нельзя переключиться на мастер, потому что есть незафиксированные изменения

Я установил репозиторий GIT для решения VS 2013 на visualstudio.com. Репозиторий отлично работал, когда я привык использовать TFS (в режиме GIT).

Затем я решил ознакомиться с ветвями, поэтому я создал ветку мастера. Я внес несколько изменений в эту ветку. Я скорректировал изменения с течением времени и выполнил синхронизацию, чтобы вытащить мои локальные коммиты в репозиторий visualstudio.com. Все это работает.

Проблема, с которой я сталкиваюсь, заключается в том, что я как-то потерял способность переключиться на главную ветку. Я не могу объединить мою вновь созданную ветвь в мастер. Каждый раз, когда я пытаюсь сделать все, что связано с мастером, я получаю следующую ошибку в VS:

Невозможно переключиться на мастер, потому что есть незафиксированные изменения. Заблокируйте или отмените изменения, прежде чем переключаете ветки. Подробнее см. Окно вывода.

Окно вывода никогда не содержит никаких "деталей"...

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

Я действительно просто изучаю TFS, GIT и источник управления. Как я могу безопасно оправиться от этой проблемы?

4b9b3361

Ответ 1

Хорошо, у меня была такая же проблема, как и rwkiii - это ошибка в Visual Studio, и ее нелегко исправить. Вот симптомы:

Visual Studio заявляет, что вы не можете объединять/переключаться с файлами /etc. потому что у вас есть незафиксированные изменения - это нормально, за исключением всех ваших изменений.

Невозможно переключиться на мастер, потому что есть незафиксированные изменения. Заблокируйте или отмените изменения, прежде чем переключаете ветки. Подробнее см. Окно вывода.

Вот скриншот, чтобы быть более четким.

Если вы посмотрите на окно вывода, оно может выглядеть пустым, но вам нужно изменить "Показать вывод с" на "Управление источником - Git". Это приведет к отображению файла, который Visual Studio считает внесенным.

Make sure "Source Control - Git" is selected

Теперь вещи, которые я пробовал, чтобы не не исправлял (так вам не нужно):

  • Перезапуск Visual Studio
  • Перезапуск машины
  • Переключение проектов
  • Использование внешних инструментов git (все из которых указаны без изменений)
  • git reset
  • Выполнение произвольных изменений в файле и их фиксация. Commits ok, VS все еще думает, что там больше изменений.

В конце концов, мне пришлось пойти и удалить файл с диска, а затем "отменить", которые меняются в окне Team Explorer:

Click "undo" to restore the file and your ability to switch branches

Не самое идеальное решение, но, похоже, оно исправляет его.

Ответ 2

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

В разделе "Изменения в Team Explorer" выберите "Открыть командную строку" .

В командной строке введите:

git статус

Он отобразит файлы, открытые для изменения.

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

git checkout - mysubdir\myfile.ext

Не пытайтесь изменять ветки в Visual Studio, это все равно не сработает!

Вместо этого в командной строке перейдите к соответствующей ветке.

git checkout branchname

Когда вы вернетесь в Visual Studio, вам будет предложено перезагрузить проект. После этого ветка будет правильно обновлена ​​до ветки, выбранной из командной строки.

HTH

Ответ 3

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

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

Я не знаком с тем, как Visual Studio интегрируется с git, поскольку я сам использую PoshGit с Powershell

Чтобы продолжить, выполните следующие действия:

  • Отменить изменения
  • Зафиксируйте свои изменения.
  • Или занести изменения (см. раздел "Прерванный рабочий процесс" ).

Ответ 4

Привет, это помогло мне...

Попробуйте использовать командную строку Team Explorer > Unsynced commit > Действия > Открыть командную строку

Сделайте git checkout имя_набора

Ответ 5

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

git status (this should show you culprit files)

затем добавьте отдельные файлы. Или то, что я лично делаю, запускается:

git add -A 

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

Ответ 6

Я разрешил подобную проблему без необходимости удаления файла или внесения новых изменений.

После внесения изменений в BranchA, слияния с Master и нажатия Git bash, в следующий раз, когда я открыл проект в VS и посмотрел на Team Explorer, он показал, что произошли изменения в ветки мастера. При проверке статуса с помощью Git bash изменений не было обнаружено, но в VS-выходе было указано 10 файлов. Разница во всех файлах не изменилась. На данный момент я испробовал исправление фиксации, но это не позволило мне изменить предыдущую фиксацию (подробнее об этом ниже, поскольку в конечном итоге это исправит мою проблему).

Попробовал переключиться на BranchA в VS и получил сообщение, которое я не могу переключить из-за незафиксированных изменений. Переключитесь на BranchA через Git bash, и статус не изменится. Обновите VS Team Explorer, так что теперь он находится на BranchA, показывает 14 изменений файла, даже больше, чем Master, но опять же, на всех файлах не было изменений.

В то время как на BranchA в Team Explorer я нажал на Actions- > Amend Previous Commit. На этот раз это позволило, и все изменения были устранены. Затем он показал ожидающее фиксацию, но проверка статуса на Git bash пока не показала ничего ожидающего, поэтому, перейдя в Home in Team Explorer и вернувшись, очистите ожидающее сообщение фиксации.

Переключится на Мастер в Team Explorer, и никаких изменений там нет. Все хорошо.

Ответ 7

Я решил решить свою проблему, удалив свое репо из File Explorer, а затем из Visual Studio, выбрав "отменить все изменения", когда удаленные записи будут зарегистрированы. При восстановлении repo Visual Studio функционировала как ожидалось в тандеме с git.

Ответ 8

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

Например, вы могли бы иметь "MyLibrary\ABC\Folder\MyFile.cs" в репозитории, но "MyLibrary\Abc\Folder\MyFile.cs" на диске. В "состоянии git" изменений не обнаружено, но Visual Studio будет блокировать ветвь.

Удаление только MyFile.cs с диска в этом случае не решит проблему - вам нужно будет удалить каталог ABC, а затем отменить изменения для Visual Studio, чтобы воссоздать структуру папок с правильными именами.

Ответ 9

У меня возникла эта проблема после того, как я изменил имя файла, начиная с буквы нижнего регистра, до буквы верхнего регистра после того, как я уже сделал файл. Я исправил это, изменив имя файла (я только что добавил "1" в конце), а затем совершил это изменение. Затем я смог переключить ветки.

Как уже упоминалось выше, мне пришлось изменить "Show output from:" combo to "Source Control - Git" в окне "Вывод", чтобы увидеть имя файла-нарушителя, который показал мне, что файл имя VS/git ожидалось, не было заглавной, где, когда имя в проводнике решений/в файловой системе было заглавным.

Ответ 10

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

Что работает для нас, когда появляется сообщение об ошибке:

  • В VS посмотрите в окне Вывод, чтобы увидеть, какой файл вызывает проблему.
  • В Git bash выполните git update-index --no-assume-unchanged TheNameOfTheFileCausingTheIssue
  • В VS Отменить проверку в этом файле
  • В VS измените ветвь в Управление ветвями.

Это может или не может работать для вашей ситуации, но я добавил его, если он ставит кого-то в правильном направлении. Убедитесь, что вы поняли команду Git перед ее запуском!

Ответ 11

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