設定與配置
取得與建立專案
基本快照
分支與合併
分享與更新專案
檢查與比較
修補
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 2.44.1 → 2.47.0 無變更
-
2.44.0
02/23/24
- 2.43.2 → 2.43.5 無變更
-
2.43.1
02/09/24
-
2.43.0
11/20/23
- 2.38.1 → 2.42.3 無變更
-
2.38.0
10/02/22
- 2.35.1 → 2.37.7 無變更
-
2.35.0
01/24/22
- 2.30.1 → 2.34.8 無變更
-
2.30.0
12/27/20
- 2.27.1 → 2.29.3 無變更
-
2.27.0
06/01/20
- 2.23.1 → 2.26.3 無變更
-
2.23.0
08/16/19
概要
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}
同義。這通常用於在兩個分支之間快速切換,或取消因錯誤導致的分支切換。在特殊情況下,如果只有一個合併基礎,您可以使用
A...B
作為A
和B
的合併基礎的快捷方式。您最多可以省略A
和B
中的一個,在這種情況下,它預設為HEAD
。 - -c <new-branch>
- --create <new-branch>
-
在切換到分支之前,建立一個名為
<new-branch>
的新分支,該分支從<start-point>
開始。這是以下交易等效項目:$ 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
選項,則新分支的名稱將從遠端追蹤分支衍生,方法是查看為對應遠端配置的 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
-
當想要的 ref 已經被另一個工作區檢出時,
git switch
會拒絕操作。此選項會讓它仍然檢出該 ref。換句話說,該 ref 可以被多個工作區持有。 - --recurse-submodules
- --no-recurse-submodules
-
使用
--recurse-submodules
將會根據超專案中記錄的 commit,更新所有活動的子模組內容。如果沒有使用任何參數(或使用--no-recurse-submodules
),則不會更新子模組的工作樹。就像 git-submodule[1] 一樣,這會分離子模組的HEAD
。
範例
以下命令會切換到 "master" 分支
$ git switch master
在錯誤的分支工作後,切換到正確的分支會使用以下命令
$ git switch mytopic
然而,你的 "wrong" 分支和正確的 "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 -
您可以從任何 commit 建立新的分支。例如,切換到 "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'
要檢查 commit 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 checkout <something>
或git switch <something>
會檢出另一個遠端上的<something>
分支時,git-switch[1] 和 git-checkout[1] 會使用此設定,並且當git worktree add
指向遠端分支時,git-worktree[1] 也會使用此設定。將來此設定可能會用於其他類似檢出的命令或功能。 - checkout.guess
-
為
git checkout
和git switch
中的--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] 套件的一部分