Проверка эквивалентных ветвей приводит к появлению неотслеживаемых файлов - PullRequest
2 голосов
/ 25 августа 2011

Итак, у меня есть 3 ветви: master, testing и dev. все они отслеживают соответствующие ветви на remotes/origin my git branch -a показывает следующее:

dev
master
testing
remotes/origin/master
remotes/origin/testing
remotes/origin/dev

Когда я запускаю тестирование, я объединяю dev в testing, затем, когда я выпускаю приложение, я объединяю testing в master, так что master фактически является моей веткой релиза.

Некоторое время это работало хорошо, у меня было несколько икот, и мне пришлось сделать несколько силовых ударов до origin. Ничего страшного, маленькая команда разработчиков и все такое. Недавно я сделал релиз, поэтому все мои ветки в настоящее время эквивалентны (master == testing == dev == origin/master == origin/testing == origin/dev)

Сегодня другой разработчик и я заметили, что когда мы сделали git checkout master, тонна неотслеживаемых / перемещенных / удаленных / переименованных файлов обнаружилась при запуске git status. Это странно, потому что помните, что все ветви указывают на один и тот же коммит. Как это может произойти?

Единственный способ исправить это сделать что-то вроде git reset --hard origin/master, тогда я могу переключиться на testing или dev. Странно то, что этого не происходит при переключении между testing и dev, просто когда я переключаюсь на master

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

1 Ответ

1 голос
/ 28 января 2013

Больше информации, когда я делаю git checkout master, он жалуется на однозначный реф 'master'

РЕШЕНИЕ:

По какой-то причине у меня есть ссылка с именем master в .git/refs/ Она указывает на ДЕЙСТВИТЕЛЬНО старый коммит. поэтому, когда я сделал git checkout master, он пожаловался на неоднозначную ссылку, потому что есть две ссылки с именем master:

  1. Местная ветвь отслеживания master, которая отслеживает origin/master
  2. Эта странная ссылка master Я зависал в .git/refs/master

Следовательно, двусмысленная жалоба и команда проверки, похоже, отдают предпочтение 2-му master. Я удалил файл .git/refs/master, и проблема исчезла.

Я, должно быть, сделал что-то не так во время клона, потому что я попробовал это снова, и это не дало master ref.

...