Gitで別のブランチに切り替えるにはどうすればいいですか? 質問する

Gitで別のブランチに切り替えるにはどうすればいいですか? 質問する

次の行のうちどれが正しいでしょうか?

git checkout 'another_branch'

または

git checkout origin 'another_branch'

または

git checkout origin/'another_branch'

そして、それらの違いは何でしょうか?

ベストアンサー1

another_branchすでにローカルに存在し、このブランチにいない場合は、git checkout another_branchブランチに切り替えます。

another_branchは存在しないが、がorigin/another_branch存在する場合、 はgit checkout another_branchと同等ですgit checkout -b another_branch origin/another_branch; git branch -u origin/another_branch。つまり、another_branchから を作成しorigin/another_branchorigin/another_branchを の上流として設定しますanother_branch

どちらも存在しない場合はgit checkout another_branchエラーを返します。

git checkout origin another_branchほとんどの場合、エラーが返されます。 がoriginリビジョンで がanother_branchファイルの場合、そのリビジョンのファイルがチェックアウトされますが、おそらくこれは期待どおりではありません。 はorigin主に で使用されgit fetch、リモートとしてgit pullgit push、リモート リポジトリへの URL のエイリアスとして使用されます。

git checkout origin/another_branch存在する場合は成功しますorigin/another_branch。これにより、どのブランチにも存在しない、分離された HEAD 状態になります。新しいコミットを作成すると、新しいコミットは既存のブランチからアクセスできなくなり、どのブランチも更新されません。

アップデート

2.23.0 がリリースされたので、これを使用してgit switchブランチを作成および切り替えることもできます。

存在する場合はfoo、次のものに切り替えてみてくださいfoo:

git switch foo

fooが存在せず、が存在する場合は、からorigin/foo作成してに切り替えてみてください:fooorigin/foofoo

git switch -c foo origin/foo
# or simply
git switch foo

より一般的には、fooが存在しない場合は、foo既知の参照またはコミットから作成を試み、次に に切り替えますfoo

git switch -c foo <ref>
git switch -c foo <commit>

Gitlab と Github で同時にリポジトリを管理する場合、ローカル リポジトリには、たとえばoriginGitlab 用とgithubGithub 用の 2 つのリモートが存在する可能性があります。この場合、リポジトリにはorigin/fooと がありますgithub/foo。は、どの refまたはからを作成すればよいかわからないため、 というgit switch fooエラー メッセージが表示されます。必要に応じてまたは を使用して を指定する必要があります。両方のリモート ブランチからブランチを作成する場合は、新しいブランチに区別できる名前を使用することをお勧めします。fatal: invalid reference: fooorigin/foogithub/foofoogit switch -c foo origin/foogit switch -c foo github/foo

git switch -c gitlab_foo origin/foo
git switch -c github_foo github/foo

存在する場合はfoo、既知の参照またはコミットから再作成/強制作成foo(またはリセットfoo)を試行し、次に切り替えますfoo

git switch -C foo <ref>
git switch -C foo <commit>

これは以下と同等です:

git switch foo
git reset [<ref>|<commit>] --hard

既知の参照またはコミットの分離された HEAD に切り替えてみます。

git switch -d <ref>
git switch -d <commit>

ブランチを作成するだけで、そのブランチに切り替えたくない場合は、git branch代わりに を使用します。既知の参照またはコミットからブランチを作成してみてください。

git branch foo <ref>
git branch foo <commit>

おすすめ記事