получить удаленную ветку с тем же именем - PullRequest
5 голосов
/ 11 июня 2011

Я хочу получить ветку с пульта, но мое имя ветки не начинается с имени, например:

git checkout -b BRANCH origin/BRANCH

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

fatal: git checkout: updating paths is incompatible with switching branches.

, хотя я уверен, что на пульте есть эта ветка, и это работает:

git checkout -b origin/BRANCH

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

Ответы [ 2 ]

11 голосов
/ 11 июня 2011

Вот почему вы получаете сообщение об ошибке.

git checkout может сделать одну из двух вещей.Если вы просто указываете ветку и не указываете какие-либо пути, она переключит вашу текущую ветку на указанную вами ветку.

git checkout mybranch   # switch to branch 'my branch'

Если вы предоставите несколько путей, то git извлечет эти пути либо изиндекс или, если вы укажете ветку, из данной ветки.

git checkout myfile   # checkout 'myfile' from index

Как видите, существует потенциальная неоднозначность.Что должно произойти, если у вас есть ветка с именем myfile или файл с именем mybranch?

Способ, которым git разрешает эту неоднозначность, заключается в том, что он проверяет параметр, чтобы определить, соответствует ли он сначала ветви, и еслине предполагает, что параметр ссылается на файл.Если у вас были ветвь и файл с одинаковым именем, вы можете заставить git рассматривать параметр как файл с этим синтаксисом.

git checkout -- myfile  # treat 'myfile' as a file

Опция -b, которая создает новую ветвь, действительна толькокогда вы используете форму переключения ветвей checkout, а не когда извлекаете указанные файлы из индекса.

git checkout -b newbranch myfile  # Illegal. I can't use `-b` when
                                  # I'm checking out files.

Если вы попробуете git checkout -b newbranch origin/BRANCH и получите эту ошибку, это означает, что origin/BRANCH не соответствует названию какой-либо ветки, которую вы используете, так что git предположил, что вы должны ссылаться на файл.

Чтобы показать, какие ссылки на удаленные ветки у вас есть, вы можете сделать git branch -r.Если у вас нет ссылки на ветку, которая, по вашему мнению, должна существовать, вам, возможно, придется выполнить git fetch, чтобы получить ее с пульта.

Если вы предоставили -b, но не указали имя ветви для базыновая ветвь отключена, git по умолчанию использует HEAD, т. е. фиксацию, в которой включена ваша текущая извлеченная ветвь.

git checkout -b origin/BRANCH

Это создает новую локальную ветвь с именем origin/BRANCHна основе вашего текущего коммита.Это, в лучшем случае, может вызвать у вас некоторую путаницу и совсем не похоже на то, что вы хотите.

2 голосов
/ 11 июня 2011

git checkout переключается на какую-то ветку, она не извлекает ее из удаленного хранилища.git checkout -b также создает ветку.Чтобы получить ветку из удаленного репозитория, используйте git fetch.

...