git-switch

コマンド名

「git-switch」:ブランチを切り替えます

概要

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>を指定すると、ヘッドが現在ポイントしている場所以外の履歴内のポイントに基づいてブランチを作成できます(または--detachの場合、他のポイントから確認してデタッチすることができます)。

@{-N} シンタックスを使用して、「gitswitch」または「gitcheckout」操作を使用して切り替えられたN番目の最後のブランチ/コミットを参照できます。@{-1}と同義の-を指定することもできます。これは2つのブランチをすばやく切り替えたり、誤ってブランチの切り替えを元に戻したりするためによく使用されます。

特別な場合として、マージベースが1つしかない場合、AB のマージベースのショートカットとしてA...Bを使用できます。ABの最大1つを省略できます。その場合、デフォルトでHEADになります。

-c <new-branch>
--create <new-branch>

ブランチに切り替える前に<start-point>から始まる<new-branch>という名前の新しいブランチを作成します。これは次の場合に便利なショートカットです。

$ git branch <new-branch>
$ git switch <new-branch>

-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]の「DETACHEDHEAD」セクションを参照してください。

--guess
--no-guess

<branch>が見つからないが、名前が一致する1つのリモート(<remote>と呼びます)に追跡ブランチが存在する場合、次と同等のものとして扱います。

$ git switch -c <branch> --track <remote>/<branch>

ブランチが複数のリモートに存在し、そのうちの1つがcheckout.defaultRemote構成変数によって名前が付けられている場合、<branch> がすべてのリモートで一意でなくても、曖昧さ回避の目的でそのブランチを使用します。例えば、<branch>が曖昧であるがオリジンリモートに存在する場合、そこからリモートブランチを常にチェックアウトするためのcheckout.defaultRemote=origin を設定します。git-config[1]のcheckout.defaultRemoteも参照してください。

--guessがデフォルトの動作です。--no-guessを使用して無効にします。

-f
--force

--discard-changesのエイリアスです。

--discard-changes

インデックスまたはワークツリーがHEADと異なる場合でも続行します。インデックスとワークツリーの両方がスイッチングターゲットに一致するように復元されます。--recurse-submodulesが指定されている場合、サブモジュールの内容もスイッチングターゲットに一致するように復元されます。これはローカルの変更を破棄するために使用されます。

-m
--merge

現在のブランチと切り替え先のブランチの間で異なる1つ以上のファイルにローカルの変更がある場合、コマンドは変更をコンテキストに保持するためにブランチの切り替えを拒否します。ただしこのオプションを使用すると、現在のブランチ、ワークツリーの内容、および新しいブランチの間の3方向のマージが実行され、新しいブランチに移動します。

マージのコンフリクトが発生すると、コンフリクトするパスのインデックスエントリはマージされないままになり、コンフリクトを解決し、解決されたパスをgit add(またはマージによってパスが削除される場合はgit rm)でマークする必要があります。

--conflict=<style>

上記の--mergeオプションと同じですが、コンフリクトするハンクの表示方法を変更し、merge.conflictStyle構成変数を上書きします。可能な値は「merge」(デフォルト)と「diff3」です(「merge」スタイルで表示されるものに加えて、オリジナルコンテンツを表示します)。

-q
--quiet

クワイエットで、フィードバックメッセージを抑制します。

--progress
--no-progress

--quietが指定されていない限り、進行状況ステータスは末端に接続されている場合、デフォルトで標準エラーストリームにレポートされます。このフラグは--quietに関係なく、末端に接続されていない場合でも進行状況のレポートを有効にします。

-t
--track

新しいブランチを作成する時、「アップストリーム」構成をセットアップします。-cを意味します。詳細についてはgit-branch[1]の--trackを参照してください。

-cオプションが指定されていない場合、新しいブランチの名前は対応するリモート用に構成された参照スペックのローカル部分を調べ、最初の部分を「*」まで削除することにより、リモート追跡ブランチから取得されます。これはorigin/hack(またはremotes/origin/hackrefs/remotes/origin/hack)から分岐する時、ローカル分岐としてhackを使用するように指示します。指定された名前にスラッシュがない場合、または上記の推測の結果が空の名前になる場合、推測は中止されます。このような場合、-cを使用して明示的に名前を付けることができます。

--no-track

branch.autoSetupMerge構成変数が「true」の場合でも「アップストリーム」構成をセットアップしません。

--orphan <new-branch>

<new-branch>という名前の新しい「orphan」ブランチを作成します。追跡されたファイルはすべて削除されます。

--ignore-other-worktrees

必要な参照が別のワークツリーによってすでにチェックアウトされている場合、git switchは拒否します。このオプションを使用すると参照をチェックアウトできます。つまり参照は複数のワークツリーで保持できます。

--recurse-submodules
--no-recurse-submodules

--recurse-submodulesを使用するとスーパープロジェクトに記録されたコミットに従って、すべてのアクティブなサブモジュールのコンテンツが更新されます。何も使用されていない場合(または--no-recurse-submodulesの場合)、サブモジュールのワークツリーは更新されません。git-submodule[1]と同様にこれはサブモジュールのHEADを切り離します。

次のコマンドは「マスター」ブランチに切り替わります。

$ git switch master

間違ったブランチでワークした後、正しいブランチへの切り替えは次を使用して行われます。

$ git switch mytopic

ただし「wrong」ブランチと正しい「mytopic」ブランチはローカルで変更したファイルで異なる場合があります。その場合、上記の切替は次のように失敗します。

$ git switch mytopic
error: You have local changes to 'frotz'; not switching branches.

コマンドに-mフラグを指定すると3方向のマージが試行されます。

$ git switch -m mytopic
Auto-merging frotz

この3者間マージの後、ローカルの変更はインデックスファイルに登録されないため、git diffは新しいブランチの末端以降に行った変更を表示します。

「mytopic」に切り替える前に前のブランチ(つまり、「マスター」ブランチ)に戻すには次のようにします。

$ 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-checkout[1], git-branch[1]

GIT

git[1]パッケージソフトの一部

git公式ドキュメント

switch