設定與組態
取得與建立專案
基本快照
分支與合併
分享與更新專案
檢查與比較
修補
除錯
電子郵件
外部系統
伺服器管理
指南
- gitattributes
- 命令列介面規範
- Git 日常使用
- 常見問題 (FAQ)
- 詞彙表
- 掛鉤 (Hooks)
- gitignore
- gitmodules
- 修訂版本 (Revisions)
- 子模組
- 教學
- 工作流程
- 所有指南...
管理
底層命令 (Plumbing Commands)
-
2.55.0
2026-06-29
- 2.51.1 → 2.54.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>
描述
切換到指定的分支。工作樹與索引(index)將更新以匹配該分支。所有新的提交都將添加到該分支的末端。
可以選擇透過 -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] 中的「分離的 HEAD(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-
如果您在一個或多個檔案上有本地修改,且這些檔案在目前分支與要切換到的分支之間存在差異,則該命令通常會拒絕切換分支,以保留您的修改。但是,使用此選項時,衝突的本地變更會在切換前自動暫存(stash),並在切換後重新套用。如果本地變更與分支間的差異沒有重疊,則切換會在不暫存的情況下進行。如果重新套用暫存時導致衝突,該項目會被儲存到暫存清單中。解決衝突並在完成後執行
gitstashdrop,或者在之後執行gitstashpop重新套用變更前,先清除工作樹(例如使用gitreset--hard)。 --conflict=<style>-
與上面的
--merge選項相同,但會更改衝突修改塊的呈現方式,覆蓋merge.conflictStyle配置變數。可能的值為merge(預設)、diff3和zdiff3。 -q--quiet-
安靜模式,抑制回饋訊息。
--progress--no-progress-
當標準錯誤串流連接到終端機時,預設會報告進度狀態,除非指定了
--quiet。無論是否指定--quiet,此旗標都會啟用進度報告,即使未連接到終端機也是如此。 -t--track[ (direct|inherit)]-
建立新分支時,設定「上游(upstream)」組態。
-c為預設包含。詳細資訊請參閱 git-branch[1] 中的--track。如果未提供
-c選項,新分支的名稱將從遠端追蹤分支推導,方法是查看為相應遠端設定的 refspec 的本地部分,然後去除 "*" 之前的初始部分。這會告訴我們在從origin/hack(或remotes/origin/hack,甚或是refs/remotes/origin/hack)建立分支時,將hack用作本地分支名稱。如果給定的名稱沒有斜線,或者上述推導結果為空名稱,則會中止推導。在此類情況下,您可以明確使用-c給予名稱。 --no-track-
即使
branch.autoSetupMerge設定變數為真,也不要設定「上游(upstream)」組態。 --orphan<new-branch>-
建立一個名為 <new-branch> 的孤兒(unborn)分支。所有被追蹤的檔案都會被移除。
--ignore-other-worktrees-
當所需的引用(ref)已被另一個工作樹檢出時,
gitswitch會拒絕執行。此選項使其強制檢出該引用。換句話說,該引用可以由多個工作樹共同持有。 --recurse-submodules--no-recurse-submodules-
使用
--recurse-submodules將根據 superproject 中記錄的提交來更新所有作用中子模組的內容。如果未使用此選項(或使用--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 Applied autostash. Switched to branch 'mytopic' The following paths have local changes: M 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
組態設定 (CONFIGURATION)
本節中此行以下的內容是從 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.guess-
為
gitcheckout和gitswitch中的--guess或--no-guess選項提供預設值。請參閱 git-switch[1] 和 git-checkout[1]。 checkout.workers-
更新工作區時使用的平行工作執行緒數量。預設值為 1,即循序執行。如果設定為小於 1 的值,Git 將使用與可用邏輯核心數量相同的工作執行緒。此設定和
checkout.thresholdForParallelism會影響所有執行檢出的指令。例如:checkout、clone、reset、sparse-checkout 等。注意平行檢出通常能為位於 SSD 或透過 NFS 存取的儲存庫提供更好的效能。對於位於傳統硬碟和/或核心數量較少的機器上的儲存庫,預設的循序檢出通常表現更好。儲存庫的大小和壓縮程度也可能影響平行版本的表現。 checkout.thresholdForParallelism-
當執行檔案數量較少的平行檢出時,產生子程序和程序間通訊的成本可能會抵消平行化帶來的收益。此設定允許您定義嘗試平行檢出的最小檔案數量。預設值為 100。
GIT
git[1] 套件的一部分