Как переключиться на другую ветку в git?

Какая из этих строк правильная?

git checkout 'another_branch'

Или же

git checkout origin 'another_branch'

Или же

git checkout origin/'another_branch'

И в чем разница между этими линиями?


Ответы

Ответ 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>

Ответ 2

Переход на другую ветку в git. Прямой ответ,

git-checkout - Переключение ветвей или восстановление рабочих файлов дерева

git fetch origin         <----this will fetch the branch
git checkout branch_name <--- Switching the branch

Прежде чем переключать ветвь, убедитесь, что у вас нет каких-либо измененных файлов, в этом случае вы можете зафиксировать изменения или вы можете их спрятать.

Ответ 3

[ git checkout "branch_name" ]

это еще один способ сказать:

[ git checkout -b branch_name origin/branch_name ]

в случае, если имя "branch_name" существует только удаленно.

[ git checkout -b branch_name origin/branch_name ] полезна, если у вас несколько пультов.

Что касается [ git checkout origin 'another_branch' ] Я не уверен, что это возможно, AFAK вы можете сделать это, используя команду "fetch" - [ git fetch origin 'another_branch' ]

Ответ 4

Проверьте: git branch -a

Если вы получаете только одну ветку. Затем выполните шаги ниже.

  • Шаг 1: git config --list
  • Шаг 2: git config --unset remote.origin.fetch
  • Шаг 3: git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/*

Ответ 5

Если вы хотите, чтобы ветвь отслеживала удаленную ветвь, что очень важно, если вы собираетесь фиксировать изменения в ветке и извлекать изменения и т.д., Вам нужно добавить add -t для фактической проверки, например: git checkout -t branchname

Ответ 6

С Git 2.23 и далее можно использовать git switch <branch name> для переключения веток.

Ответ 7

Для меня сработало следующее:

Переключитесь на нужную ветку:

git checkout -b BranchName

А потом я вытащил "мастера" по:

git pull origin master