如何在git中切换到另一个分支?


Answers:


225

如果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_branchorigin/another_branch和集origin/another_branch为一体的上游another_branch

如果都不存在,则git checkout another_branch返回错误。

git checkout origin another_branch在大多数情况下会返回错误。如果origin是修订版本并且another_branch是文件,则它将签出该修订版本的文件,但很可能不是您所期望的。origin在主要使用git fetchgit pullgit push作为远程链接到远程存储库的一个别名。

git checkout origin/another_branch成功(如果origin/another_branch存在)。它导致处于分离的HEAD状态,而不是在任何分支上。如果进行新的提交,则任何现有分支都无法访问新的提交,并且不会更新任何分支。

更新

随着2.23.0版本的发布,我们也可以使用它git switch来创建和切换分支。

如果foo存在,请尝试切换到foo

git switch foo

如果foo不存在,origin/foo存在,尝试创建fooorigin/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和githubGithub的远程服务器。在这种情况下,存储库具有origin/foogithub/foogit switch foo会抱怨fatal: invalid reference: foo,因为它不知道从哪个裁判,origin/foo或者github/foo,创造foo。我们需要与指定它git switch -c foo origin/foogit switch -c foo github/foo根据需要。如果要从两个远程分支创建分支,最好为新分支使用可区分的名称:

git switch -c gitlab_foo origin/foo
git switch -c github_foo github/foo

如果foo存在,请尝试foofoo已知的ref或commit 重新创建/强制创建(或重置为),然后切换到foo

git switch -C foo <ref>
git switch -C foo <commit>

等效于:

git switch foo
git reset [<ref>|<commit>] --hard

尝试切换到已知引用或提交的分离HEAD:

git switch -d <ref>
git switch -d <commit>

如果您只想创建一个分支但不切换到该分支,请git branch改用。尝试从已知的引用或提交创建分支:

git branch foo <ref>
git branch foo <commit>

24
这个答案是正确的(与往常一样,并且赞成),但是我将添加一条可能有用的注释:git checkout我认为该命令执行了太多操作。这就是为什么这里有这么多种操作模式的原因。如果唯一要做的git checkout就是切换分支,答案很简单,但它也可以创建分支,甚至可以从特定提交中提取文件而无需切换分支。
torek '17

11
这是正确的答案,但显示了如何在命令行中混淆git。git checkout切换分支?
thang '18年

3
@thang好吧,在2.23.0版中,这已得到纠正:您现在可以使用git switch切换到分支。
legends2k

Switch似乎不适用于此版本的git。在此版本的git中,我该如何使用切换到另一个分支?C:\ widget> git --version git版本2.11.0.windows.3 C:\ widget> git switch master git:'switch'不是git命令。参见'git --help'。C:\ widget>
约翰

1
@John git checkout代替用于旧版本,它也适用于现代版本。
ElpieKay

66

切换到git中的另一个分支。简单的答案,

git-checkout-切换分支或还原工作树文件

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

在切换分支之前,请确保您没有任何修改的文件,在这种情况下,您可以提交更改或隐藏它们。


最后一条命令使我进入分离的HEAD状态。表示不能编辑分支。

2
尚未提取您尝试签出的分支,那么您需要在签出之前提取。如果分支是最新的,则可以跳过获取操作,只需使用git checkout分支名称即可。
danglingpointer

切换到分支后执行“ git pull”是否足够?

也可以拉,pull在后台进行提取并合并在一起。我看不到任何差异。
danglingpointer

17

[ 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您可以使用“提取”命令-[ git fetch origin 'another_branch']


我知道用于创建另一个分支的命令“ git checkout -b branchName”。这不是问题!

10

Git 2.23开始,您可以git switch <branch name>用来切换分支。


6

对我有用的是:

切换到所需的分支:

git checkout -b BranchName

然后我通过以下方式拉“主人”:

git pull origin master

6

在日常生活中有用的命令:

git checkout -b "branchname" ->  creates new branch
git branch                   ->  lists all branches
git checkout "branchname"    ->  switches to your branch
git push origin "branchname" ->  Pushes to your branch
git add */filename           -> Stages *(All files) or by given file name
git commit -m "commit message" -> Commits staged files
git push                     -> Pushes to your current branch

5

如果您希望分支机构跟踪远程分支机构(如果您要向分支机构提交更改并提取更改等信息,则非常重要),则需要为实际签出使用添加-t,例如: git checkout -t branchname


4

检查: git branch -a

如果只得到一个分支。然后执行以下步骤。

  • 第1步 : git config --list
  • 第2步 : git config --unset remote.origin.fetch
  • 第三步: git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/*

2
我不知道这一系列命令将如何切换到另一个分支。

以前做过浅克隆(使用depth参数)并且现在想知道为什么无法error: pathspec 'another_branch' did not match any file(s) known to git使用上面建议的命令获取另一个远程分支时,这样做可能很有用。这当然不是最初的问题是什么,但是它可以帮助其他人在这里挠头。
luciash d'是

0

我正在使用它将一个分支切换到另一个分支,任何人都可以使用它,就像魅力一样对我有用。

git switch [branchName]或git checkout [branchName]

例如:git switch开发或
git checkout开发

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.