設定と構成
プロジェクトの取得と作成
基本的なスナップショット
ブランチとマージ
プロジェクトの共有と更新
検査と比較
パッチ
デバッグ
メール
外部システム
サーバー管理
- 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
の場合、他の場所を検査して切り離すことができます。)「git switch」または「git checkout」操作を使用して切り替えた最後のN番目のブランチ/コミットを参照するには、
@{-N}
構文を使用できます。「-」は@{-1}
と同義です。これは、2つのブランチ間をすばやく切り替えたり、誤ってブランチの切り替えを元に戻したりするのによく使用されます。特殊なケースとして、マージベースが正確に1つ存在する場合は、
A...B
をA
とB
のマージベースのショートカットとして使用できます。A
と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]の「DETACHED HEAD」セクションで詳細を確認してください。
- --guess
- --no-guess
-
<branch>
が見つからないが、正確に1つのリモート(<remote>
と呼びます)に一致する名前の追跡ブランチが存在する場合は、以下と同等に扱います。$ git switch -c <branch> --track <remote>/<branch>
ブランチが複数のリモートに存在し、そのうちの1つが
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
-
現在のブランチと切り替えるブランチの間で異なるファイルにローカルな変更がある場合、変更をコンテキストで維持するために、コマンドはブランチの切り替えを拒否します。ただし、このオプションを使用すると、現在のブランチ、作業ツリーの内容、新しいブランチ間の3方マージが行われ、新しいブランチに移動します。
マージの競合が発生すると、競合するパスのインデックスエントリはマージされずに残され、競合を解決し、
git add
(またはマージの結果としてパスが削除される場合はgit rm
)を使用して解決されたパスをマークする必要があります。 - --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
構成変数がtrueの場合でも、「upstream」構成を設定しません。 - --orphan <new-branch>
-
<new-branch>
という名前の新しい未作成ブランチを作成します。追跡されているすべてのファイルが削除されます。 - --ignore-other-worktrees
-
目的のrefが別のワークツリーで既にチェックアウトされている場合、
git switch
は拒否します。このオプションを使用すると、とにかくrefをチェックアウトできます。つまり、複数のワークツリーでrefを保持できます。 - --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
フラグを指定すると、3方マージが試行されます。
$ git switch -m mytopic Auto-merging frotz
この3方マージの後、ローカルの変更はインデックスファイルに登録されません。そのため、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>
を実行し、リモートが1つしかない場合、暗黙的にorigin/<something>
などのチェックアウトとトラッキングにフォールバックすることがあります。これは、<something>
参照を持つリモートが2つ以上になると機能しなくなります。この設定により、あいまいさを解消する際に常に優先されるリモートの名前を設定できます。一般的なユースケースとしては、これを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]スイートの一部