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

Posted

技术标签:

【中文标题】如何切换到 git 中的另一个分支?【英文标题】:How can I switch to another branch in git? 【发布时间】:2018-05-17 18:37:33 【问题描述】:

以下哪一行是正确的?

git checkout 'another_branch'

git checkout origin 'another_branch'

git checkout origin/'another_branch'

它们之间有什么区别?

【问题讨论】:

git checkout [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。即从origin/another_branch创建another_branch,并将origin/another_branch设置为another_branch的上游。

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

git checkout origin another_branch 在大多数情况下返回错误。如果origin 是一个修订版而another_branch 是一个文件,那么它会检出该修订版的文件,但很可能这不是您所期望的。 origin 主要用于git fetchgit pullgit push 作为远程,远程存储库的url 的别名。

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

更新

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

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

git switch foo

如果foo不存在而origin/foo存在,尝试从origin/foo创建foo,然后切换到foo

git switch -c foo origin/foo
# or simply
git switch foo

更一般地说,如果foo 不存在,请尝试从已知的引用或提交创建foo,然后切换到foo

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

如果我们同时在 Gitlab 和 Github 中维护一个仓库,则本地仓库可能有两个远程,例如,origin 用于 Gitlab,github 用于 Github。在这种情况下,存储库有origin/foogithub/foogit switch foo 会抱怨 fatal: invalid reference: foo,因为它不知道从哪个引用 origin/foogithub/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,请尝试从已知的引用或提交重新创建/强制创建foo(或将foo重置为),然后切换到foo

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

相当于:

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

尝试切换到已知 ref 或 commit 的分离 HEAD:

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

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

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

【讨论】:

这个答案是正确的(像往常一样,并且赞成),但我会添加一个 可能 有帮助的评论:git checkout 命令做了太多的事情,在我的想法。这就是为什么这里有如此多的操作模式。如果git checkout 唯一做的事情是switch 分支,答案会很简单,但它也可以创建 分支,甚至可以从特定提交中提取文件无需 切换分支。 这是正确的答案,但显示了 git 在命令行中是如何搞砸的。 git checkout 切换分支? @thang 好吧,在 2.23.0 版本中,这个问题得到了解决:您现在可以使用 git switch 切换到一个分支。 Switch 似乎不适用于这个版本的 git。在这个版本的 git 中,我用什么来切换到不同的分支? C:\widget>git --version git version 2.11.0.windows.3 C:\widget>git switch master git: 'switch' 不是 git 命令。请参阅“git --help”。 C:\小部件> @John 使用 git checkout 代替旧版本,这也适用于现代版本。【参考方案2】:

[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']

【讨论】:

我知道用于创建另一个分支的命令“git checkout -b branchName”。这不是问题!【参考方案3】:

切换到 git 中的另一个分支。直截了当的回答,

git-checkout - 切换分支或恢复工作树文件

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

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

【讨论】:

最后一个命令让我进入分离的 HEAD 状态。表示无法编辑分支。 未获取您尝试结帐的分支,然后您需要在结帐前获取。如果分支是最新的,您可以跳过获取,然后只需使用 git checkout 分支名称。 切换到分支后执行“git pull”还不够吗? pull 也可以,pull 在后台进行抓取和合并。我没有看到任何差异。【参考方案4】:

检查:git branch -a

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

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

【讨论】:

不知道这一系列命令会如何切换到另一个分支。 这在你之前做了一个 shallow clone(使用depth 参数)时可能很有用,现在想知道为什么你不能获取另一个远程分支来获取@987654326 @ 使用上面建议的命令。这肯定不是最初的问题,但它可以帮助其他人在这里摸不着头脑。【参考方案5】:

如果您希望分支跟踪远程分支,如果您要提交更改到分支并拉取更改等,这一点非常重要,您需要为实际结帐添加-t,如下所示: git checkout -t branchname

【讨论】:

【参考方案6】:

Git 2.23 以后,可以使用git switch &lt;branch name&gt; 切换分支。

【讨论】:

天哪,这改变了游戏规则。稍微相关,您可以使用 git restore 来了解 checkout 对文件的作用。【参考方案7】:

对我有用的是:

切换到需要的分支:

git checkout -b BranchName

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

git pull origin master

【讨论】:

【参考方案8】:

我正在使用它来将一个分支切换到另一个你可以使用它的任何人都可以像魅力一样为我工作。

git 切换 [branchName] 或 git checkout [branchName]

例如:git 切换开发或 git checkout 开发

【讨论】:

【参考方案9】:

日常生活中有用的命令:

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

如果你想从特性分支合并到开发, 首先使用命令“git branch dev/develop”检查开发分支 然后输入合并命令 "git merge featurebranchname"

【讨论】:

谢谢兄弟,краткость сестра таланта 在上面的回复旁边)【参考方案10】:

更改分支的最佳命令

git branch -M YOUR_BRANCH

【讨论】:

请补充一下下面三个命令有什么区别【参考方案11】:

查看远程分支列表:

git branch -a

切换到另一个分支:

git checkout -b <local branch name> <Remote branch name>
Example: git checkout -b Dev_8.4 remotes/gerrit/Dev_8.4

查看本地分行列表:

git branch

更新所有内容:

git pull

【讨论】:

【参考方案12】:

要使用您的更改切换到分支,您应该先进行 fetch。这是为了保存您的 package.json.env 文件等更改

所以: git fetch

然后: git checkout &lt;new branch&gt;

此答案适用于像我这样卡了一段时间的人。

【讨论】:

【参考方案13】:

这些是我遵循的步骤:

git 克隆 link cd repo 文件夹

您可以检查状态以及您正在使用的分支:

git 状态 git 分支 git 分支-a

注意:如果您在移动到新分支之前在本地存储库中进行了更改,则以下步骤应该仍然有效。

如果“git branch”显示master,并且你想创建+移动到另一个分支:

git checkout -b 分支名称

使用“git branch”再次检查分支 它现在应该表明您在新分支中。

现在添加、提交和推送:

git 添加。 git commit -m "新增分支" git push origin 分支名称

上述步骤适用于我在移动到新的本地分支之前进行更改或在移动到新分支之后进行更改的情况。 我希望它可以帮助遇到类似情况的人,这也是这里提到的问题的解决方案:Link

【讨论】:

【参考方案14】:

在 git 中切换到另一个分支可以通过一个命令来完成。

git switch branch-name

【讨论】:

以上是关于如何切换到 git 中的另一个分支?的主要内容,如果未能解决你的问题,请参考以下文章

利用PyCharm操作Github:分支新建切换合并删除

如何在 Git 的另一个分支中选择性地合并或选择更改?

如何使用 1 个命令从 Git 的另一个分支中挑选最后一个 sha?

当 Jupyter 笔记本在一个分支上运行时,如何安全地切换 Git 分支?

如何克隆 git bitbucket 中的特定分支

git切换分支时,如何保存当前分支的修改(暂时不想提交)