Сообщение об ошибке Visual Studio 2015 Git Невозможно извлечь/переключиться из-за незафиксированных изменений

У меня возникли трудности с извлечением из origin. Я продолжаю получать:

«Невозможно извлечь, так как есть незафиксированные изменения. Подтвердите или отмените изменения перед повторным извлечением. Дополнительные сведения см. в окне вывода».

Это также относится к переключению ветвей. Я получаю подобное сообщение, но это не всегда происходит.

Я использую Visual Studio 2015 Update 1 и Visual Studio Team Services Git. На моей машине у меня есть локальная ветка master и ветки разработки. Каждый раз, когда я переключаюсь на master, а затем делаю тягу, я получаю сообщение об ошибке. Я прибегал к созданию тайника и сброса тайника (командная строка), а иногда я использую TortoiseGit для выполнения натяжка и работает.

Странно то, что даже если я пытаюсь вернуться (для незафиксированных файлов) с помощью TortoiseGit, он показывает, что он был успешно отменен (я уже пытался отменить Visual Studio, ничего не происходит). Пытаюсь вытащить снова, проблема все та же. Незафиксированные файлы будут там, и иногда, когда я делаю git status, он говорит, что нечего фиксировать.

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

Я все еще новичок в Git, но я хотел бы знать, есть ли лучший способ решить эту проблему, поскольку я хотел бы использовать одну среду вместо использования переключения между разными средами для каждой задачи; мне проще просто делать все из Visual Studio. Я уже прочитал:

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

ОБНОВЛЕНИЕ

Похоже, эта проблема связана с окончаниями строк.

Выполнив git diff -R, вы увидите, что добавлено окончание строки "^M", и оно отличается. Удаление * text=auto в gitattributes (затем проверьте наличие изменений) и повторное включение его, чтобы gitattributes не сигнализировал об изменении самого себя, которое необходимо зафиксировать, похоже, помогает, никаких изменений не будет.


person kwiri    schedule 15.04.2016    source источник
comment
Я несколько раз перезапустил Visual Studio, а затем смог внести изменения, которые привели меня к экрану конфликтов слияния.   -  person Manish Jain    schedule 31.10.2016


Ответы (13)


У меня не было незафиксированных изменений или неотслеживаемых файлов, и Visual Studio 2015 по-прежнему выдавал предупреждение.

  1. Закройте решение в Visual Studio, выйдите из Visual Studio.
  2. Откройте Git Bash (или ваш любимый пользовательский интерфейс Git)
  3. Перейдите в свой репозиторий (или откройте репозиторий с помощью пользовательского интерфейса Git).
  4. git pull (или выполнить извлечение в пользовательском интерфейсе Git)
  5. Происходит слияние (надеюсь, никаких конфликтов, как в моем случае), открывается vi (или инструмент разрешения слияния по умолчанию)
  6. :wq, затем нажмите ENTER в vi (или спокойно используйте инструмент слияния, который появился необязательно), и, надеюсь, это решит проблему так же, как и для меня.
  7. Запустите Visual Studio 2015, откройте проект

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

person Csaba Toth    schedule 22.05.2016
comment
Я согласен, всегда проверяйте, работает ли это вне VS, командной строки или любого другого графического интерфейса Git. - person VladNeacsu; 05.09.2016
comment
С мая было несколько обновлений VS, а также обновлений интеграции VS Git. Давно я не видел этих несчастий. Всегда обновляйте VS и его плагины до последней версии. - person Csaba Toth; 14.12.2016
comment
Постоянно видит эту ошибку, я поражен, что такая основная проблема существует в таком серьезном продукте... - person Christopher Bonitz; 21.04.2017
comment
Я использую обновление 3 VS 2015. Возникла эта проблема при извлечении из репозитория github. -открыл командную строку, -изменил каталог на репозиторий git на локальном компьютере и -ввел git pull - person phani; 29.06.2017

Введите git status в командную строку, открытую в этом каталоге. Если есть красный и/или зеленый текст, вы что-то изменили, а не добавили и не зафиксировали. Либо верните файлы (выполнив git checkout -- <file>), либо добавьте и зафиксируйте (выполнив git add --all, затем git commit -m "commit message"). Затем вы можете проверить ветки или что-то еще, что вы хотите сделать.

person TechnicalTophat    schedule 15.04.2016
comment
У меня есть неотслеживаемые файлы. Может ли быть проблема в этом? - person kwiri; 15.04.2016
comment
@kwiri да, это означает, что вы создали файлы с момента последней фиксации и не зафиксировали их. Просто выполните git add --all и git commit -m "Add your commit message here". После этого вы сможете проверить другие ветки. - person TechnicalTophat; 15.04.2016
comment
Мне нужно будет проверить, как Visual Studio справляется с этим, потому что, если вы добавляете файлы в проект, они также должны автоматически добавляться в фиксацию. В данный момент у меня нет доступа к моему исходному коду, но я почти уверен, что зафиксировал файлы в ветке dev, прежде чем переключиться на master, где я пытался сделать pull. - person kwiri; 15.04.2016
comment
@kwiri Хорошо, если бы вы могли прокомментировать дополнительную информацию, например, название ветки, в которой возникает ошибка, что показывает ваш git log и что отредактировал ваш последний коммит (в отношении неотслеживаемых файлов) - person TechnicalTophat; 15.04.2016
comment
@kwiri Неотслеживаемые файлы не могут быть проблемой, ИМХО. Проблема может заключаться в том, что вы изменили отслеживаемые файлы или промежуточные файлы, которые не были зафиксированы. В моем случае у меня не было незафиксированных, неотслеживаемых или измененных файлов, VS 2015 по-прежнему выдавал это предупреждение. Пришлось пойти в Git Bash и vi, чтобы разобрать его. Иногда VS 2015 дает сбой во время конфликтов слияния. - person Csaba Toth; 23.05.2016
comment
@CsabaToth Хорошая работа, Microsoft -.- - person TechnicalTophat; 06.12.2016
comment
@RhysO С мая было несколько обновлений VS, а также обновлений интеграции VS Git. У меня гораздо меньше этих неудач в последнее время. ВСЕГДА обновляйте VS и его плагины до последних версий. - person Csaba Toth; 14.12.2016

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

git add -A
git commit -m "your message"
git fetch origin master
git pull origin master
git push origin master //To push to the Git system
person Dhruv    schedule 15.04.2016
comment
Вопрос не в командах, а в инструментах VS 2015. Я хотел бы работать в одной среде с VS Team Explorer. Из-за времени я не хотел бы переключаться на команды и пытаться запомнить все команды, когда у нас уже есть встроенный инструмент в VS, я думаю, может быть, как структурирован наш проект, может быть, что-то мы делаем неправильно, что вызывает проблемы - person kwiri; 15.04.2016
comment
У меня сработало, спасибо :) git add -A git commit -m ваше сообщение git pull - person Amit K Khanchandani; 30.08.2016
comment
Это сработало отлично для меня! Вы можете написать эти команды в консоли диспетчера пакетов в VS2015, и она отлично работает. Моя проблема решена! @Друв - person Abed G.; 02.11.2016

Такое бывает иногда даже со мной. Если вы используете Visual Studio, есть простой способ прояснить ситуацию.

Для Visual Studio 2013 и более поздних версий следуйте следующим инструкциям, поскольку это сработало для меня:

  • Перейдите в меню ИнструментыДиспетчер пакетов NuGetКонсоль диспетчера пакетов. .
  • Введите git reset и нажмите Enter.

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

VS2015: Инструменты > Диспетчер пакетов Nuget > Консоль диспетчера пакетов. Работал как шарм. Спасибо.

person Yagnesh Khamar    schedule 24.04.2018

У меня была эта проблема в Visual Studio 2017, сборка 15.5, и что исправило ее для меня, так это перейти в Team Explorer НастройкиГлобальные настройки и установить "Удалить удаленные ветки во время выборки " и "Перебазировать локальную ветвь при извлечении" на True.

Настройки Team Explorer Git

http://www.codewrecks.com/blog/index.php/2017/12/23/configure-visual-studio-2017-15-5-for-pull-rebase/

Также у MS есть инструкции здесь: https://docs.microsoft.com/en-us/azure/devops/repos/git/git-config?tabs=visual-studio&view=vsts#prune-remote-веткивовремявыборки Момент фейспалма наступает, когда вы понимаете, что «Мы рекомендуем установить для этого параметра значение True на глобальном уровне». не является настройкой по умолчанию для этих элементов.

Другой пример этой проблемы возникает в том случае, если у вас есть отдельный сервер сборки, а решение получает частые обновления NuGet для компиляторов. У первого, кто обновит пакеты NuGet и синхронизирует репозиторий, не возникнет проблем, но если кто-то другой попытается выполнить обновление локально, перед выполнением синхронизации появится это сообщение, и VS не позволит вам извлекать или отправлять код. Чтобы предотвратить эту проблему, каждый должен привыкнуть к синхронизации, прежде чем выполнять какие-либо обновления локально. Когда-то обнаруженный нами лучший способ решить эту проблему — спрятать любой незафиксированный код, который вам нужно сохранить (https://marketplace.visualstudio.com/items?itemName=vii.GitStashExtension), затем сбросьте репозиторий до текущей главы.

person user1431356    schedule 13.01.2018
comment
У меня нет удаления удаленных веток во время выборки и перебазирования локальной ветки при извлечении - person Ziggler; 15.11.2018
comment
@Зигглер Правда? Я добавил ссылки на два источника выше. Начиная с VS Pro 2017 v15.5 и по крайней мере до v15.8.7 эти параметры перечислены. - person user1431356; 12.12.2018
comment
команда Unset используется для удаления конфигураций Git, поэтому в контексте она выглядит немного неуместной. С последним обновлением Git Extensions на странице настроек Git появилось еще несколько параметров. @Ziggler: Какая у вас версия VS? - person Laurie Stearn; 16.04.2019
comment
Спасибо, это сработало для меня. Потерял несколько часов с этой проблемой - person deanwilliammills; 28.04.2019

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

Например, вы добавляете новый файл «test.txt» из локальной папки репозитория Git напрямую (вне Visual Studio). Этот файл может быть указан в опции «Неотслеживаемые файлы», поэтому, когда вы фиксируете изменения, этот файл не отслеживается и не фиксируется. А затем другой человек также создает «test.txt» с тем же путем, фиксирует и отправляет его. Теперь, когда вы выполняете действие извлечения, файл «test.txt» включается в действие извлечения, и вы получите сообщение об ошибке, указывающее на наличие незафиксированных изменений. Поэтому вам нужно проверить, есть ли у вас файлы/изменения, которые не были зафиксированы, и зафиксировать их перед извлечением.

person Eddie Chen - MSFT    schedule 18.04.2016
comment
У меня все еще возникают странные проблемы. Я пытаюсь выполнить слияние вручную, Git говорит, что есть незафиксированные изменения, я делаю тайник, и он все еще говорит, что есть незафиксированные изменения. Я не хочу фиксировать свои изменения, потому что я не вносил никаких изменений в эти файлы, и diff не показывает никаких изменений в файлах. Я пробовал reset --hard то же самое, он говорит, что есть незафиксированные изменения и те же файлы. - person kwiri; 19.04.2016
comment
Спасибо. когда я удалил файл в Untracked Files, я смог переключить свои ветки. - person Muhammad Ashikuzzaman; 03.08.2016

Это сработало для меня. Я просто зашел в каталог проекта и проверил, есть ли там что-то

git status

Затем я выполнил тягу, используя

git pull

Затем я перезапустил Visual Studio 2015 и вытащил ветку, которая вызывала эту ошибку. На этот раз без проблем. Похоже, это была ошибка в Visual Studio 2015. Это происходит только тогда, когда вы отменяете свои изменения, прежде чем вносить новые изменения. Эта же проблема, похоже, не существует в Visual Studio 2017.

person Rachit Chauhan    schedule 16.08.2018
comment
Это решило мою проблему с получением ошибки при применении тайника с использованием VS 2019. - person shellBlazer; 24.10.2019

У меня тоже была эта пробема. Простое решение заключалось в том, что я выбрал Зафиксировать в решении, чтобы просмотреть незафиксированные файлы (или легко использовать Team ExplorerChanges).

Затем я отменяю каждый файл, щелкнув правой кнопкой мыши. Раньше я тестировал его с помощью Отменить на всем решении, но оно не работало должным образом. Затем снова я использовал Team ExplorerSyncPull, и это сработало.

person Elnaz    schedule 16.05.2018

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

Существует простое решение для исправления этой ошибки:

Сначала зафиксируйте изменения в тайнике или отмените. Затем вытащите код. например

git тянуть

Тогда он должен работать нормально.

person Aditya Raj    schedule 31.07.2020

Для меня «Обновление» в вопросе было ответом. Я добавил файл .gitattributes в корень моего репозитория и включил только следующее, чтобы окончания строк нормализовались только в тех случаях, когда файл является текстовым.

*.txt text
*.html text
*.css text
*.js text
# These files are text and should be normalized (Convert crlf => lf)
*.gitattributes text
.gitignore text
*.md texttesting 
person Josh    schedule 02.11.2017

Вот шаги, которые я выполнил:

  1. Обратитесь к пути незафиксированного файла в окне вывода.
  2. Перейдите по этому пути и удалите этот файл из папки
  3. Отмените изменения из Team Explorer в Visual Studio, чтобы снова добавить их.
person CSharp    schedule 17.08.2017

Для меня эта проблема была вызвана наличием двух файлов: «Web.Config» и «web.config». Я думаю, это нормально в Linux/Unix, но Windows может хранить только один из них локально. Я обнаружил это в azure devops, изучая файлы. Я удалил один из них, и проблема была решена. Я предполагаю, что эта проблема может быть вызвана любым файлом.

person Emil Helldin    schedule 11.10.2018

В Visual Studio откройте Output Window и переключите Show output from на Source Control - git, git сообщит вам о том, что мешает ему тянуть. Одной из наиболее распространенных причин может быть, конечно, что-то вроде этого:

The pull would overwrite your local changes to the following 44 files:
    <Here you can probably see a list of 44 files>

Это просто означает, что в репозиторий remote добавлено 44 файла, которые не являются частью репозитория local. Откройте Git Bash и выполните эту команду:

git add *

Это может решить проблему или привести к ошибке, подобной этой:

$ git add *
The following paths are ignored by one of your .gitignore files:
TestResults
Use -f if you really want to add them.

Если вы уверены, что хотите добавить их в репродукцию local, просто добавьте их с помощью git add * -f или удалите ошибочно добавленные файлы из remote.

Надеюсь это поможет.

person Babak    schedule 18.10.2018