Почему git switch / checkout не переключает ветку? - PullRequest
0 голосов
/ 19 марта 2020

У меня есть два локальных филиала, master и test. Я хочу переключиться с master на test.

Если я использую git checkout test, консоль говорит:

Ваша ветка обновлена ​​с помощью origin / master

и я все еще в master ветви.

Если я использую git switch test, консоль говорит:

fatal: отсутствует ветвь или передайте аргумент`

и снова я все еще в master ветви.

Что здесь происходит?

Вот что я сделал:

  • git checkout -b 'test' → создано и переключено на test.
  • git checkout master → переключено на master.
  • git checkout test и git switch test → Я хочу переключиться обратно на test, но это не работает.

1 Ответ

1 голос
/ 19 марта 2020

[Я бежал]

git checkout -b 'test'

Мне не понятно, почему вы помещаете test в одинарные кавычки здесь. Если ваш интерпретатор командной строки (например, bash) удаляет одинарные кавычки, все в порядке. Если это не (например, cmd.exe, по-видимому), вы получите ветку, имя которой буквально 'test', , включая символы одинарных кавычек .

Чтобы использовать это имя ветки, вам придется продолжать заключать его в кавычки:

git switch 'test'

, потому что имя ветки буквально 'test', а не test.

General совет

Как правило, если у вас Git 2.23 или более поздняя версия, используйте новые команды (git switch и git restore) вместо старых (git checkout). Старая все еще работает, но может вызывать путаницу.

В частности, старая команда git checkout может выполнять несколько различных заданий, в зависимости от того, какой аргумент (ы) вы ей даете:

  • git checkout master переключится на ветку master.

  • git checkout -- master восстановит файл с именем master из текущего филиал.

Пока все в порядке. Но старая команда git checkout имеет то, что я считаю довольно большим недостатком. Если вы запустите:

git checkout xyzzy

, а xyzzy - это , а не ответвление name, git checkout рассмотрит попытку, как если бы вы запустили:

git checkout -- xyzzy

, который обрабатывает xyzzy как имя файла (или путь) и пытается извлечь файл xyzzy или xyzzy/* из индекса. Следовательно, если у вас нет ветки с именем test, но do есть файл с именем test или целая куча файлов, имена которых все Начните с test/, git checkout не будет жаловаться на отсутствие ветки test.

Используя git switch, вы получите жалобу. Вы не случайно получите git restore поведение от git checkout.

Я думаю, что это происходит в вашем случае: у вас есть файл или папка с именем test и ветвь с именем 'test' (с одинарными кавычками), и вам нужно Git восстановить файл с именем test вместо переключиться на ветку с именем 'test'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...