设置和配置
获取和创建项目
基本快照
分支与合并
共享和更新项目
检查和比较
打补丁
调试
电子邮件
外部系统
服务器管理
指南
管理
底层命令
- 2.51.1 → 2.52.0 无更改
- 2.51.0 无更改
- 2.50.1 无更改
-
2.50.0
2025-06-16
- 2.44.1 → 2.49.1 无更改
-
2.44.0
2024-02-23
- 2.43.2 → 2.43.7 无变更
-
2.43.1
2024-02-09
-
2.43.0
2023-11-20
- 2.38.1 → 2.42.4 无更改
-
2.38.0
2022-10-02
- 2.35.1 → 2.37.7 无更改
-
2.35.0
2022-01-24
- 2.30.1 → 2.34.8 无更改
-
2.30.0
2020-12-27
- 2.27.1 → 2.29.3 无更改
-
2.27.0
2020-06-01
- 2.23.1 → 2.26.3 无更改
-
2.23.0
2019-08-16
概要
gitswitch[<options>] [--no-guess] <branch>gitswitch[<options>]--detach[<start-point>]gitswitch[<options>] (-c|-C) <new-branch> [<start-point>]gitswitch[<options>]--orphan<new-branch>
描述
切换到指定的分支。工作区和索引会更新以匹配该分支。所有新提交都将添加到该分支的尖端。
可以选择使用 -c、-C 创建新分支,或者(参见 --guess)自动从同名远程分支创建,或者使用 --detach 将工作区与任何分支分离,同时进行切换。
切换分支不需要干净的索引和工作区(即与 HEAD 没有差异)。但是,如果操作会导致本地更改丢失,则该操作将被中止,除非使用 --discard-changes 或 --merge 另行指定。
选项
- <branch>
-
要切换到的分支。
- <new-branch>
-
新分支的名称。
- <start-point>
-
新分支的起点。指定 <start-point> 允许您基于历史记录中不同于
HEAD当前指向的点来创建分支。(或者,在--detach的情况下,允许您检查并分离出历史记录中的其他点。)您可以使用
@{-<N>}语法来引用使用gitswitch或gitcheckout操作切换到的第 <N> 个最后分支/提交。您也可以指定-,它等同于@{-1}。这通常用于在两个分支之间快速切换,或撤销错误的切换。作为一种特殊情况,您可以使用 <rev-a>
...<rev-b> 作为 <rev-a> 和 <rev-b> 的合并基地的快捷方式,前提是只有一个合并基地。您可以省略 <rev-a> 和 <rev-b> 中的最多一个,在这种情况下,它默认为HEAD。 -c<new-branch>--create<new-branch>-
在切换到分支之前,创建名为 <new-branch> 的新分支,并从 <start-point> 开始。这是以下命令的事务性等价操作:
$ git branch <new-branch> $ git switch <new-branch>
也就是说,分支不会被重置/创建,除非
gitswitch成功(例如,当分支在另一个工作区中使用时,不仅当前分支保持不变,而且分支也不会被重置到起点)。 -C<new-branch>--force-create<new-branch>-
与
--create类似,但如果 <new-branch> 已经存在,它将被重置到 <start-point>。这是以下命令的便捷快捷方式:$ git branch -f _<new-branch>_ $ git switch _<new-branch>_
-d--detach-
切换到提交以供检查和可丢弃的实验。有关详细信息,请参阅 git-checkout[1] 中的“DETACHED HEAD”部分。
--guess--no-guess-
如果找不到 <branch>,但只有一个远程(称为 <remote>)存在同名跟踪分支,则将其视为等同于:
$ git switch -c <branch> --track <remote>/<branch>
如果分支存在于多个远程仓库中,并且其中一个由
checkout.defaultRemote配置变量命名,我们将使用该远程仓库进行歧义消除,即使 <branch> 在所有远程仓库中并不唯一。将其设置为例如checkout.defaultRemote=origin,以便在 <branch> 模棱两可但存在于 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=<style>-
与上面的
--merge选项相同,但会更改冲突块的呈现方式,覆盖merge.conflictStyle配置变量。可能的值包括merge(默认)、diff3和zdiff3。 -q--quiet-
安静模式,抑制反馈消息。
--progress--no-progress-
默认情况下,如果进度状态流被连接到终端,则进度状态会显示在标准错误流上,除非指定了
--quiet。此标志即使未连接到终端也会启用进度报告,无论--quiet如何。 -t--track[ (direct|inherit)]-
创建新分支时,设置“上游”配置。隐含
-c。有关详细信息,请参阅 git-branch[1] 中的--track。如果未提供
-c选项,则新分支的名称将从远程跟踪分支派生,方法是查看相应远程配置的 refspec 的本地部分,然后剥离直到“*”的前缀。这将告诉我们在从origin/hack(或remotes/origin/hack,甚至refs/remotes/origin/hack)分支时使用hack作为本地分支。如果给定名称没有斜杠,或者上述猜测结果为空名称,则猜测中止。在这种情况下,您可以显式使用-c提供名称。 --no-track-
即使
branch.autoSetupMerge配置变量为 true,也不设置“上游”配置。 --orphan<new-branch>-
创建一个新的未提交分支,名为 <new-branch>。所有已跟踪的文件都将被删除。
--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
但是,您的“错误”分支和正确“mytopic”分支在您本地修改过的文件上可能有所不同,在这种情况下,上述切换将失败,如下所示:
$ git switch mytopic error: You have local changes to 'frotz'; not switching branches.
您可以向命令传递 -m 标志,这将尝试进行三向合并:
$ git switch -m mytopic Auto-merging frotz
在此三向合并后,本地修改**不会**在您的索引文件中注册,因此 git diff 会显示自新分支尖端以来您所做的更改。
切换回我们切换到 mytopic(即“master”分支)之前的上一个分支:
$ git switch -
您可以从任何提交开始增长新分支。例如,切换到“HEAD~3”并创建分支“fixup”:
$ git switch -c fixup HEAD~3 Switched to a new branch 'fixup'
如果您想从同名的远程分支开始新分支:
$ git switch new-topic Branch `new-topic` set up to track remote branch `new-topic` from `origin` Switched to a new branch `new-topic`
签出提交 HEAD~3 进行临时检查或实验,而无需创建新分支:
$ git switch --detach HEAD~3 HEAD is now at 9fc9555312 Merge branch 'cc/shared-index-permbits'
如果事实证明您所做的任何事情都值得保留,您可以随时为其创建一个新名称(而无需切换离开):
$ git switch -c good-surprises
配置
本节中以下所有内容均从 git-config[1] 文档中选择性地包含。内容与彼处相同:
checkout.defaultRemote-
当您运行
gitcheckout<something> 或gitswitch<something> 且只有一个远程时,它可能会隐式地回退到签出和跟踪 e.g.origin/<something>。一旦您有多个具有 *<something>* 引用的远程,这种情况就会停止工作。此设置允许设置一个首选远程的名称,该名称在歧义化时应始终优先。典型用例是将其设置为origin。目前,它由 git-switch[1] 和 git-checkout[1] 使用,当
gitcheckout<something> 或gitswitch<something> 会签出另一个远程上的 *<something>* 分支时,以及由 git-worktree[1] 使用,当gitworktreeadd指的是远程分支时。此设置将来可能会用于其他类似 checkout 的命令或功能。 checkout.guess-
为
git和checkoutgit命令中的switch--guess或--no-guess选项提供默认值。参见 git-switch[1] 和 git-checkout[1]。 checkout.workers-
更新工作树时使用的并行工作进程数量。默认为一个,即顺序执行。如果设置为小于一的值,Git 将使用与可用逻辑核心数相同的数量的工作进程。此设置和
checkout.thresholdForParallelism会影响所有执行 checkout 的命令。例如:checkout、clone、reset、sparse-checkout 等。注意并行 checkout 通常可以提高位于 SSD 或 NFS 上的存储库的性能。对于旋转硬盘和/或核心数较少的机器上的存储库,默认的顺序 checkout 通常性能更好。存储库的大小和压缩级别也可能影响并行版本的性能。 checkout.thresholdForParallelism-
当使用少量文件进行并行 checkout 时,子进程生成和进程间通信的成本可能会超过并行化的收益。此设置允许您定义应尝试并行 checkout 的最小文件数。默认值为 100。