1. ホーム
  2. ギット

[解決済み】gitで他のブランチに切り替えるにはどうしたらいいですか?

2022-03-26 06:38:15

質問

次のうち、正しいのはどれでしょう?

git checkout 'another_branch'

または

git checkout origin 'another_branch'

または

git checkout origin/'another_branch'

そして、両者の違いは何でしょうか?

解決方法は?

もし 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_branch を設定し origin/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 が存在する場合は foo から origin/foo に切り替え、さらに foo :

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

より一般的には、もし foo が存在しない場合は foo を既知の ref やコミットから取得し、その後 foo :

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

Gitlab と Github で同時にリポジトリを管理する場合、たとえばローカルリポジトリが2つのリモートを持つことがあります。 origin をGitlab用に、そして github をGithubのために使用します。この場合、リポジトリには origin/foogithub/foo . git switch foo は文句を言う fatal: invalid reference: foo というのは、どの文献からのものなのかがわからないからです。 origin/foo または github/foo を作成するために foo . で指定する必要があります。 git switch -c foo origin/foo または git 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

既知のrefやcommitのdetached HEADに切り替えてみてください。

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

ブランチを作成するだけで、切り替えを行わない場合は、以下のようにします。 git branch の代わりに 既知の参照やコミットからブランチを作成するようにしましょう。

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