設定和配置
獲取和建立專案
基本快照
分支與合併
共享和更新專案
檢查和比較
打補丁
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 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
概要
git
switch
[<options>] [--no-guess
] <branch>git
switch
[<options>]--detach
[<start-point>]git
switch
[<options>] (-c
|-C
) <new-branch> [<start-point>]git
switch
[<options>]--orphan
<new-branch>
描述
切換到指定分支。工作區和索引會更新以匹配該分支。所有新提交將新增到此分支的頂部。
可以選擇使用 -c
、-C
來建立新分支,或者自動從同名遠端分支建立(參見 --guess
),或者使用 --detach
將工作區與任何分支分離,同時進行切換。
切換分支不需要乾淨的索引和工作區(即與 HEAD
沒有差異)。但如果操作導致本地更改丟失,則操作會被中止,除非使用 --discard-changes
或 --merge
另行指定。
此命令是實驗性的。其行為可能會發生變化。
選項
- <branch>
-
要切換到的分支。
- <new-branch>
-
新分支的名稱。
- <start-point>
-
新分支的起始點。指定 <start-point> 允許您建立一個基於歷史中某個其他點的分支,而不是
HEAD
當前指向的點。(或者,在使用--detach
的情況下,允許您檢查並從其他點分離。)您可以使用
@{-
<N>}
語法來引用使用git
switch
或git
checkout
操作切換到的倒數第 <N> 個分支/提交。您也可以指定-
,它等同於@{-1}
。這通常用於在兩個分支之間快速切換,或撤銷錯誤的分支切換。作為一種特殊情況,如果存在且只有一個合併基礎,您可以使用 <rev-a>
...
<rev-b> 作為 <rev-a> 和 <rev-b> 的合併基礎的快捷方式。您最多可以省略 <rev-a> 和 <rev-b> 中的一個,在這種情況下它預設為HEAD
。 -c
<new-branch>--create
<new-branch>-
在切換到新分支之前,從 <start-point> 建立一個名為 <new-branch> 的新分支。這等同於事務性的
$ git branch <new-branch> $ git switch <new-branch>
也就是說,除非
git
switch
成功(例如,當該分支在另一個工作區中使用時,不僅當前分支保持不變,而且該分支也不會被重置到起始點),否則分支不會被重置/建立。 -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] 中的“分離 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
-
如果您對一個或多個檔案進行了本地修改,這些檔案在當前分支和您要切換到的分支之間有所不同,該命令會拒絕切換分支以保留您的修改。但是,使用此選項,將進行當前分支、您的工作區內容和新分支之間的三方合併,然後您將處於新分支上。
當發生合併衝突時,衝突路徑的索引條目將保持未合併狀態,您需要解決衝突並使用
git
add
(如果合併應導致路徑刪除,則使用git
rm
)標記已解決的路徑。 --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
選項,新分支的名稱將從遠端跟蹤分支派生,方法是檢視為相應遠端配置的引用規範的本地部分,然後剝離直到“*”的初始部分。這將告訴我們在從origin/hack
(或remotes/origin/hack
,甚至refs/remotes/origin/hack
)分支出來時使用hack
作為本地分支。如果給定的名稱沒有斜槓,或者上述猜測導致空名稱,則猜測中止。在這種情況下,您可以使用-c
顯式提供一個名稱。 --no-track
-
不設定“上游”配置,即使
branch.autoSetupMerge
配置變數為 true。 --orphan
<new-branch>-
建立一個名為 <new-branch> 的新的未誕生分支。所有被跟蹤的檔案都將被移除。
--ignore-other-worktrees
-
git
switch
會拒絕切換到已被其他工作區檢出的引用。此選項使其無論如何都檢出該引用。換句話說,該引用可以被多個工作區持有。 --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
-
當您執行
git
checkout
<something> 或git
switch
<something> 且只有一個遠端時,它可能會隱式回退到檢出和跟蹤例如origin/
<something>。一旦您有多個具有 <something> 引用的遠端時,此功能就會停止工作。此設定允許設定首選遠端的名稱,在消歧時該遠端應始終獲勝。典型的用例是將其設定為origin
。目前,git-switch[1] 和 git-checkout[1] 在
git
checkout
<something> 或git
switch
<something> 將檢出另一個遠端上的 <something> 分支時使用此功能,並且 git-worktree[1] 在git
worktree
add
引用遠端分支時也使用此功能。此設定將來可能會用於其他類似檢出的命令或功能。 checkout.guess
-
為
git
checkout
和git
switch
中的--guess
或--no-guess
選項提供預設值。參見 git-switch[1] 和 git-checkout[1]。 checkout.workers
-
更新工作區時使用的並行工作程序數量。預設值為一,即順序執行。如果設定為小於一的值,Git 將使用與可用邏輯核心數一樣多的工作程序。此設定和
checkout.thresholdForParallelism
影響所有執行檢出操作的命令。例如:checkout、clone、reset、sparse-checkout 等。注意並行檢出通常在位於 SSD 或透過 NFS 訪問的倉庫中提供更好的效能。對於位於旋轉磁碟和/或核心數量較少的機器上的倉庫,預設的順序檢出通常效能更好。倉庫的大小和壓縮級別也可能影響並行版本的效能。 checkout.thresholdForParallelism
-
當以少量檔案執行並行檢出時,子程序生成和程序間通訊的開銷可能超過並行化的收益。此設定允許您定義應嘗試並行檢出的最小檔案數。預設值為 100。