Git изменить ветвь, когда присутствует файл с таким же именем
В моем git repo есть файл с именем xyz. По совпадению, у меня также есть ветвь с именем xyz. В настоящее время я нахожусь на мастере, но я хочу оформить заказ на филиал XYZ. Используемая команда проста
$ git checkout xyz
Но это бы оформило файл xyz
на настоящую HEAD. Как бы я сменил ветку на ветку xyz
?
Ответы
Ответ 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
.