💬

Git checkout あれこれ

2021/07/10に公開

やりたいこと

  1. ローカルにリモートブランチから新しいブランチを作る
  2. 作ったブランチへ移動する

checkoutの前に

checkoutする前にリモートリポジトリの状態を確認して、ローカルに最新の状態を反映しておきます。

# リモートブランチの一覧を確認する
git branch -r

-r--remotesをつけることで、リモートブランチの一覧を確認することができます。

# リモートブランチから最新の状態を取得する
git fetch --prune

--pruneをつけることで、リモートで削除された情報も取得できます。
(オプションなしのfetachだと削除された情報は更新されない)

方法1

checkout -bを使います。

git checkout -b local_branch origin/remote_branch

方法2

checkout -tを使います。
-tのところは--trackにしても同じです。

git checkout -t origin/remote_branch

checkout -bの場合、ローカルのブランチ名を指定する必要がありますが、リモートと同じ名前にすることが多いので普段は-tオプションを使ってます。
上記のコマンドを実行すると、ローカルリポジトリにremote_branchという名前のブランチが自動で作成されます。

3. 方法3

Qiitaの記事に方法1,2より簡単な方法が紹介されていました。
試してみたら-b-tの指定なしで出来ました。
https://qiita.com/tommy_aka_jps/items/6ce68f564cb3802ca9b0

git checkout origin/remote_branch

一定の条件が満たされてる場合、ローカルリポジトリに指定のブランチ<branch>がなくても上記のコマンドで方法1,2と同じ結果が得られるようです。
公式ドキュメントには下記のように書かれています。

git checkout [<branch>]
(省略)
If <branch> is not found but there does exist a tracking branch in exactly one remote (call it <remote>) with a matching name and --no-guess is not specified, treat as equivalent to $ git checkout -b <branch> --track <remote>/<branch>

Discussion