Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
- 2.51.1 → 2.54.0 no changes
- 2.51.0 no changes
- 2.50.1 no changes
-
2.50.0
2025-06-16
- 2.44.1 → 2.49.1 no changes
-
2.44.0
2024-02-23
- 2.43.2 → 2.43.7 no changes
-
2.43.1
2024-02-09
-
2.43.0
2023-11-20
- 2.38.1 → 2.42.4 no changes
-
2.38.0
2022-10-02
- 2.35.1 → 2.37.7 no changes
-
2.35.0
2022-01-24
- 2.30.1 → 2.34.8 no changes
-
2.30.0
2020-12-27
- 2.27.1 → 2.29.3 no changes
-
2.27.0
2020-06-01
- 2.23.1 → 2.26.3 no changes
-
2.23.0
2019-08-16
概述
gitswitch'[<选项>] [--no-guess] <分支>gitswitch'[<选项>]--detach[<起点>]gitswitch'[<选项>] (-c|-C) <新分支> [<起点>]gitswitch'[<选项>]--orphan<新分支>
描述
切换到指定分支。工作区和索引会更新以匹配该分支。所有新提交的内容都会添加到该分支的顶端。
可选择使用 -c、-C,自动从同名的远程分支创建新分支(参见 --guess),或使用 --detach,从任何分支分离工作区,同时进行切换。
切换分支不需要干净的索引和工作区(即与 HEAD 相比没有差异)。但是,如果该操作会导致本地变更的丢失,除非使用 --discard-changes 或 --merge,否则该操作将被中止。
选项
- <分支>
-
转到的分支。
- <新分支>
-
新分支的名称。
- <start-point>
-
新分支的起点。指定 <起始点> 后,就可以根据历史上的其他点创建分支,而不是 HEAD 当前指向的点。(或者,在
--detach的情况下,允许你检查并从其他点分离。)您可以使用
@{-N}语法来指使用gitswitch或gitcheckout操作切换到的第 N 个分支或提交。您也可以指定与@{-1}同义的-。 这通常用于在两个分支之间快速切换,或撤销错误的分支切换。作为一种特殊情况,如果 A 和 B 的合并库只有一个,则可以使用 "A...B "作为合并库的快捷方式。您最多可以省略 A 和 B 中的一个,在这种情况下,它默认为 HEAD。
- -c <新分支>
- --create <新分支>
-
在切换到分支之前,从 <起点> 开始创建一个名为 <新分支> 的新分支。这相当于
$ git branch <新分支> $ git switch <新分支>
也就是说,除非
gitswitch成功,否则不会重置/创建分支(例如,当分支在另一个工作区中使用时,不仅当前分支保持不变,分支也不会重置为起点)。 - -C <新分支>
- --force-create <新分支>
-
类似于
--create,但如果 <新分支> 已经存在,它将被重置为 <起点>。这是一个方便的快捷方式:$ git branch -f <新分支> $ git switch <新分支>
-
-d -
--detach -
切换到用于检查和可丢弃实验的提交。详见 git-checkout[1] 中的 “分离式 HEAD” 部分。
-
--guess -
--no-guess -
如果没有找到 <分支> ,但确实有一个远程分支(称为 <远程分支> )的跟踪分支存在,且名称匹配,则视为等同于
$ git switch -c <分支> --track <远程仓库>/<分支>
如果该分支存在于多个远程,并且其中一个是由
checkout.defaultRemote配置变量命名的,为了消除歧义,我们将使用该变量,即使 <分支> 在所有远程中并不唯一。将其设置为例如checkout.defaultRemote=origin,以便在 <分支> 不明确但存在于’origin’远程时,总是从那里检出远程分支。参见 git-config[1] 中的checkout.defaultRemote。--guess是默认行为。使用--no-guess来禁用它。默认行为可以通过
checkout.guess配置变量设置。 -
-f -
--force -
--discard-changes的别名。 -
--discard-changes -
即使索引或工作区与
HEAD不同,也要继续。索引和工作区都会被恢复以匹配切换目标。如果指定了--recurse-submodules,子模块内容也会恢复到与切换目标一致。这用于丢弃本地更改。 -
-m -
--merge -
如果你对一个或多个文件所做的本地修改在当前分支和要切换到的分支之间有所不同,命令会拒绝切换分支,以保留你在上下文中的修改。 不过,如果使用了该选项,当前分支、工作区内容和新分支之间的三方合并就会完成,而你也将进入新分支。
当合并冲突发生时,冲突路径的索引条目会被留下,你需要解决冲突,并用
gitadd标记已解决的路径(如果合并应导致删除路径,则用gitrm)。 - --conflict=<样式>
-
与上面的
--merge选项相同,但改变了冲突块的显示方式,覆盖merge.conflictStyle配置变量。可能的值是merge(默认)和diff3(除了merge样式显示的内容外,还显示原始内容)。 -
-q -
--quiet -
静默,压制反馈信息。
-
--progress -
--no-progress -
当它附加到终端时,除非指定
--quiet,否则默认情况下会在标准错误流中报告进度状态。这个标志可以启用进度报告,即使没有附在到终端,而不管--quiet。 -
-t -
--track[=(direct|inherit)] -
创建新分支时,请设置 "upstream"(上游仓库)配置。 选项
-c是隐含的。详见 git-branch[1] 中的--track。如果没有给定
-c选项,新分支的名称将从远程跟踪分支中导出,方法是查看为相应远程配置的引用规范的本地部分,然后去掉首部至 "*" 的部分。 这将告诉我们,在从origin/hack(或remotes/origin/hack,甚至refs/remotes/origin/hack)分支时,使用hack作为本地分支。 如果给定的名称中没有斜线,或者上述猜测的结果是空名,猜测就会中止。 在这种情况下,可以用-c明确地给出一个名称。 -
--no-track -
不设置 "上游 "配置,即使`branch.autoSetupMerge`配置变量为true。
- --orphan <新分支>
-
创建一个新的 unborn (未出生)分支,命名为 <新分支>。所有被跟踪的文件都会被删除。
-
--ignore-other-worktrees -
当想要的引用已被另一个工作区检出时,
gitswitch会拒绝检出。这个选项会让它无论如何都把引用检出。换句话说,该引用可以被多个工作区持有。 -
--recurse-submodules -
--no-recurse-submodules -
使用
--recurse-submodules,将根据超级项目中记录的提交更新所有活动子模块的内容。如果什么都不使用(或--no-recurse-submodules),子模块工作区将不会被更新。就像 git-submodule[1],这会分离子模块的HEAD。
实例
下面的命令会切换到 "master" 分支:
$ git switch master
在错误的分支工作后,切换到正确的分支将使用:
$ git switch mytopic
但是,您的 "wrong" 分支和正确的 "mytopic" 分支可能在您本地修改的文件中存在差异,在这种情况下,上述开关就会像这样失败:
$ git switch mytopic error: 你对 'footz' 进行了本地更改,而不是切换分支。
你可以给命令加上 `-m`标志,这样就可以尝试三方合并了:
$ git switch -m mytopic 自动合并 frotz 中
在这个三方合并之后,本地的修改并「没有」登记在你的索引文件中,所以`git diff`会显示你在新分支的提示下做了哪些修改。
切换回切换到 mytopic 之前的分支(即 "master" 分支):
$ git switch -
你可以从任何提交创建一个新分支。例如,切换到 HEAD~3 并创建分支 fixup:
$ git switch -c fixup HEAD~3 切换到新分支 'fixup'
如果要从同名的远程分支启动一个新分支:
$ git switch new-topic 设置了分支 `new-topic`,以跟踪来自 `origin` 的远程分支 `new-topic` 切换到一个新分支 `new-topic`
查看提交 HEAD~3 以进行临时检查或实验,而无需创建新分支:
$ git switch --detach HEAD~3 HEAD 现为 9fc9555312 合并分支 'cc/shared-index-permbits'
如果发现你所做的任何事情都值得保留,你可以随时为它创建一个新名称(不需要换掉):
$ git switch -c good-surprises
配置
本节中这一行以下的内容都是从 git-config[1] 文档中摘录的。其内容与那里的内容相同:
-
checkout.defaultRemote -
当你运行
gitcheckout<something> 或gitswitch<something>,且只有一个远程时,它可能会隐式回退为检出并跟踪例如origin/<something>。但一旦存在多个都带有 <something> 引用的远程,这种做法就不再有效。该设置允许指定一个首选远程名称,在发生歧义时始终优先选择它。典型用法是将其设为origin。当前,git-switch[1] 和 git-checkout[1] 会在
gitcheckout<something> 或gitswitch<something> 需要检出另一个远程上的 <something> 分支时使用该设置;git-worktree[1] 也会在gitworktreeadd引用远程分支时使用它。将来其他类似 checkout 的命令或功能也可能会使用此设置。 -
checkout.guess -
为
gitcheckout和gitswitch中的--guess或--no-guess选项提供默认值。参见 git-switch[1] 和 git-checkout[1]。 -
checkout.workers -
更新工作区时所使用的并行 worker 数量。默认值为 1,即顺序执行。如果设为小于 1 的值,Git 将使用与可用逻辑核心数相同的 worker 数量。该设置与
checkout.thresholdForParallelism会影响所有执行 checkout 的命令,例如 checkout、clone、reset、sparse-checkout 等。Note并行 checkout 通常能为位于 SSD 或 NFS 上的仓库带来更好的性能。对于位于机械磁盘上的仓库和/或核心数较少的机器,默认的顺序 checkout 往往表现更好。仓库的大小和压缩级别也可能影响并行版本的性能。 -
checkout.thresholdForParallelism -
当对少量文件执行并行 checkout 时,创建子进程和进程间通信的成本可能会超过并行化带来的收益。该设置允许你定义应尝试并行 checkout 的最小文件数。默认值为 100。
GIT
属于 git[1] 文档