Ответ 1
Если another_branch
уже существует локально, а вы не находитесь в этой ветки, то git checkout another_branch
переключается на эту ветку.
Если another_branch
не существует, но origin/another_branch
существует, то git checkout another_branch
эквивалентно git checkout -b another_branch origin/another_branch; git branch -u origin/another_branch
. Чтобы создать another_branch
из origin/another_branch
и установить origin/another_branch
в качестве восходящего потока от another_branch
.
Если ничего не существует, git checkout another_branch
возвращает ошибку.
git checkout origin another_branch
в большинстве случаев возвращает ошибку. Если origin
- это ревизия, а another_branch
- это файл, то он проверяет файл этой ревизии, но, скорее всего, это не то, что вы ожидаете. origin
в основном используется в git fetch
, git pull
и git push
в качестве удаленного, псевдоним URL для удаленного хранилища.
git checkout origin/another_branch
успешен, если существует origin/another_branch
. Это приводит к тому, что он находится в отключенном состоянии HEAD, а не в какой-либо ветки. Если вы делаете новые коммиты, новые коммиты не будут доступны из существующих ветвей, и ни одна из ветвей не будет обновлена.
UPDATE:
Начиная с версии 2.23.0, мы также можем использовать git switch
для создания и переключения ветвей.
Если существует foo
, попробуйте переключиться на foo
:
git switch foo
Если foo
не существует, а origin/foo
существует, попробуйте создать foo
из origin/foo
, а затем переключиться на foo
:
git switch -c foo origin/foo
# or simply
git switch foo
В целом, если foo
не существует, попробуйте создать foo
из известного ref или commit, а затем переключитесь на foo
:
git switch -c foo <ref>
git switch -c foo <commit>
Если мы поддерживаем репозиторий в Gitlab и Github одновременно, локальный репозиторий может иметь два удаленных пульта, например, origin
для Gitlab и github
для Github. В этом случае хранилище имеет origin/foo
и github/foo
. git switch foo
будет жаловаться на fatal: invalid reference: foo
, потому что не известно, из какой ссылки origin/foo
или github/foo
создать foo
. Нам нужно указать его с помощью git switch -c foo origin/foo
или git switch -c foo github/foo
в соответствии с необходимостью. Если мы хотим создать ветки из обеих удаленных веток, лучше использовать отличительные имена для новых ветвей:
git switch -c gitlab_foo origin/foo
git switch -c github_foo github/foo
Если существует foo
, попробуйте воссоздать/принудительно создать foo
из (или сбросить foo
в) известный реф или коммит, а затем переключиться на foo
:
git switch -C foo <ref>
git switch -C foo <commit>
что эквивалентно:
git switch foo
git reset [<ref>|<commit>] --hard
Попробуйте переключиться на отдельную ГОЛОВУ известного реф или коммита:
git switch -d <ref>
git switch -d <commit>
Если вы просто хотите создать ветку, но не переключаться на нее, используйте вместо нее git branch
. Попробуйте создать ветку из известного ref или commit:
git branch foo <ref>
git branch foo <commit>