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

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

В моем git repo есть файл с именем xyz. По совпадению, у меня также есть ветвь с именем xyz. В настоящее время я нахожусь на мастере, но я хочу оформить заказ на филиал XYZ. Используемая команда проста

$ git checkout xyz

Но это бы оформило файл xyz на настоящую HEAD. Как бы я сменил ветку на ветку xyz?

4b9b3361

Ответ 1

Как показано commit a047faf (git 1.8.4.3+), вы также можете попробовать:

git checkout xyz --

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

Если вы попытаетесь без "--", это может работать или не работать, как показано в "Почему git checkout <remote_branchname> не создает новую ветку отслеживания?":

git checkout name делает:

  • если это локальная ветвь или явная удаленная ветвь, переключитесь на нее.
  • если это отслеживаемый путь, reset it
  • если это удаленная ветвь, создайте ветвь отслеживания и переключитесь на нее.

И его поведение не всегда одно и то же. Следовательно, '--', чтобы обеспечить четкую двусмысленность.

Ответ 2

В то время как решение VonC работает, я никогда не могу вспомнить синтаксис, поэтому я обычно использую более низкотехнологичное решение:

$ (cd somedir && git checkout my-branch)

Или, если у вас нет подкаталогов:

$ (cd .git && git -C .. checkout my-branch)

Это легче запомнить, и это работает ;-)

Ответ 3

Ты ошибаешься. Он будет проверять ветвь xyz.

Чтобы проверить файл, вам нужно использовать команду git checkout -- xyz. Git просто разрешите вам ярлык для файлов, если нет ветки с тем же именем.

Подробнее см. git checkout --help.