設定和配置
獲取和建立專案
基本快照
分支與合併
共享和更新專案
檢查和比較
打補丁
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 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。