1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[GitHub/Atom] リモートブランチを追跡するローカルブランチの設定方法

Posted at

Atomエディタを使っていて、GitHub上で作ったリモートブランチをローカルブランチに紐付ける方法がわからなかったので、gitコマンドの使い方の備忘録です。
きっかけは、画面右下のツールバーに表示されているFetchボタンの動作。

atom-fetch-icon.png

GitHubのリポジトリをclone後、GitHubのWeb画面上でブランチ"develop"を作成したとします。cloneしたローカルのプロジェクトをAtomで開いた時、画面右下のツールバーに表示されているFetchをクリックしても、ブランチの一覧は更新されないようです。左側の"main"と表示されているアイコンをクリックしてローカルブランチを作成しても、それをリモートの"develop"と紐づける方法が見当たらずハマりました。結局、ターミナルからgitコマンドを打って解決しました。

リモートブランチとローカルブランチを作成する順序によって、以下の3つのシナリオがあります。

  • Case 1. GitHub上でブランチAを作成した。ローカルブランチBを作成した。BをAに紐付けたい
  • Case 2. GitHub上でブランチAを作成した。Aに紐づいたローカルブランチAを作りたい
  • Case 3. ローカルブランチCを作成した。それに紐づいたリモートブランチCをGitHubに新たに作成したい

それぞれのケースについて、gitコマンドの操作を以下に書きます。動作環境は、macOS Big Sur 11.6.1, git 2.30.1 (Apple Git-130), Atom 1.58.0 (記事執筆時)です。

Case 1. GitHub上でブランチAを作成した。ローカルブランチBを作成した。BをAに紐付けたい

GitHub上でブランチ"develop-1"を作成したとします。リポジトリをローカルにcloneした直後の状態は、

$ git status
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

git branchコマンドに-aと-vvオプションを付けて、ローカルとリモートのブランチの一覧を表示します。-vvを付けるとローカルブランチに対する追跡先のリモートブランチが判ります。※出力例の右側に表示されるテキストは「.....」で省略して表記しました。

$ git branch -a -vv
* main                     39f971a [origin/main] .....
  remotes/origin/HEAD      -> origin/main
  remotes/origin/develop-1 39f971a .....
  remotes/origin/main      39f971a .....

ここで、Atomエディタでローカルブランチ"local-dev-1"を作成してみます。

$ git status
On branch local-dev-1
nothing to commit, working tree clean
$ git branch -a -vv
* local-dev-1              39f971a .....
  main                     39f971a [origin/main] .....
  remotes/origin/HEAD      -> origin/main
  remotes/origin/develop-1 39f971a .....
  remotes/origin/main      39f971a .....

まだリモートブランチには紐づいていません。local-dev-1でdevelop-1を追跡させるには、-uオプション(--set-upstream-to)を使います。

$ git branch -u origin/develop-1
Branch 'local-dev-1' set up to track remote branch 'develop-1' from 'origin'.
$ git branch -a -vv
* local-dev-1              39f971a [origin/develop-1] .....
  main                     39f971a [origin/main] .....
  remotes/origin/HEAD      -> origin/main
  remotes/origin/develop-1 39f971a .....
  remotes/origin/main      39f971a .....

Case 2. GitHub上でブランチAを作成した。Aに紐づいたローカルブランチAを作りたい

GitHub上でブランチ"develop-x"を作成したとします。

$ git branch -a -vv
* main                     39f971a [origin/main] .....
  remotes/origin/HEAD      -> origin/main
  remotes/origin/develop-x 39f971a .....
  remotes/origin/main      39f971a .....

この状態から、"origin/develop-x"を追跡するローカルブランチ"develop-x"を作る方法は2つあります。

方法1. fetchしてcheckoutする

$ git fetch origin develop-x
From https://github.com/kazhashimoto/test-branch
 * branch            develop-x  -> FETCH_HEAD
$ git checkout develop-x
Branch 'develop-x' set up to track remote branch 'develop-x' from 'origin'.
Switched to a new branch 'develop-x'

方法2. --trackオプションを使う

$ git checkout --track origin/develop-x
Branch 'develop-x' set up to track remote branch 'develop-x' from 'origin'.
Switched to a new branch 'develop-x'

いずれの方法も結果は、

$ git branch -a -vv
* develop-x                39f971a [origin/develop-x] .....
  main                     39f971a [origin/main] .....
  remotes/origin/HEAD      -> origin/main
  remotes/origin/develop-x 39f971a .....
  remotes/origin/main      39f971a .....

Case 3. ローカルブランチCを作成した。それに紐づいたリモートブランチCをGitHubに新たに作成したい

ローカルにブランチ"my-local-dev"を作ったとします。

$ git status
On branch my-local-dev
nothing to commit, working tree clean
$ git branch -a -vv
  main                39f971a [origin/main] .....
* my-local-dev        39f971a .....
  remotes/origin/HEAD -> origin/main
  remotes/origin/main 39f971a .....

pushコマンドに-uオプションを付けて実行します。

$ git push -u origin my-local-dev
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: 
remote: Create a pull request for 'my-local-dev' on GitHub by visiting:
remote:      https://github.com/kazhashimoto/test-branch/pull/new/my-local-dev
remote: 
To https://github.com/kazhashimoto/test-branch.git
 * [new branch]      my-local-dev -> my-local-dev
Branch 'my-local-dev' set up to track remote branch 'my-local-dev' from 'origin'.

リモートに"my-local-dev"が作られ、ローカルの"my-local-dev"がそれを追跡するようになります。

$ git branch -a -vv
  main                        39f971a [origin/main] .....
* my-local-dev                39f971a [origin/my-local-dev] .....
  remotes/origin/HEAD         -> origin/main
  remotes/origin/main         39f971a .....
  remotes/origin/my-local-dev 39f971a .....

まとめ

Case 1. GitHub上でブランチAを作成した。ローカルブランチBを作成した。BをAに紐付けたい

(ローカルのbranchBで)
git branch -u origin/branchA

Case 2. GitHub上でブランチAを作成した。Aに紐づいたローカルブランチAを作りたい

git fetch origin branchA
git checkout branchA

または

git checkout --track origin/branchA

Case 3. ローカルブランチCを作成した。それに紐づいたリモートブランチCをGitHubに新たに作成したい

(ローカルのbranchCで)
git push -u origin branchC

参考にした記事

この記事を書くにあたって、以下のサイトを参考にさせていただきました。

【Git】リモートブランチをチェックアウトしたいときは「git fetch origin <ブランチ名>」と「git checkout <ブランチ名>」を実行すれば良い

How can I tell a local branch to track a remote branch?

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?