Git мастер проверки не переключает ветку - репозиторий сломан?

tl; dr: git checkout master не переключается на мастер-ветку, не дает никакой ошибки или никакого вывода вообще, и я не знаю, почему. Любая другая ветка работает нормально.

У меня есть репозиторий git, который состоит из ветвей development и master. Я делаю новый клон репозитория, проверяя ветвь development по умолчанию.

$ git clone <REPO-URL> --branch development
$ git branch -a
* development
origin/HEAD -> origin/development
origin/development
origin/master
$ git show-ref 
656c781c2affc26792f857baf8e232de07101535 refs/heads/development
656c781c2affc26792f857baf8e232de07101535 refs/remotes/origin/HEAD
656c781c2affc26792f857baf8e232de07101535 refs/remotes/origin/development
cfee1a1761642453edf5d001565f23b50243ff09 refs/remotes/origin/master

Мастер ссылок указывает на правильность, что фиксация существует и является последней фиксацией моей главной ветки.

Пока все выглядит нормально, но когда я пытаюсь переключиться на мастер, это происходит:

$ git checkout master
$ git branch 
* development

Нет сообщений из проверки, нет ошибки, ничего, и ветка не переключается.

Вещи, которые я пробовал до сих пор:

  • Создание второй ветки master2 из того же commit = > checkout отлично работает.
  • Удаление и повторное создание ветки ветки как локального, так и по происхождению = > снова нет возможности проверить
  • git checkout -b master --track origin/master = > работает, но я думаю, что нет необходимости использовать эту команду, поскольку это то, что git checkout master должно делать автоматически
  • Выполнение и нажатие на мастер-работы, но не изменяет проблему проверки
  • Я пробовал несколько версий git (1.9, 2.2) и машин (linux, windows), проблема возникает везде.

Любые другие идеи? Что мне не хватает? Является ли мой репозиторий сломанным? Как я могу это исправить?

Ответ 1

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

Ответ 2

Если у вашего репо есть папка или имя файла так же, как имя ветки, вам необходимо: git checkout xyz -- с дополнительным -- в конце. Он сообщает git использовать ветку или commit вместо того, чтобы пытаться использовать имя папки/файла.

Найден ответ в другой записи stackoverflow: Git изменить ветку, когда присутствует файл с таким же именем

Ответ 3

Локальная главная ветвь в вашем репозитории не отличается от любой другой локальной ветки вашего репо. Вы клонировали свой репозиторий в свою ветку развития, которая является единственным локальным филиалом, который у вас есть. Таким образом, если вы попытаетесь проверить свою локальную ведущую ветвь, git говорит, что ее не существует.

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

Загрузите репо, чтобы овладеть веткой, и создайте локальную ветвь разработки:

git clone <repo_url>
git checkout -b development

или загрузите свое репо в ветку разработки и создайте локальную ветвь мастера:

git clone <REPO-URL> --branch development
git checkout -b master