GitHub にアップされているブランチをローカルに取り込む

公開日: : 最終更新日:2014/05/05 プログラム

GitHub に限らず、会社や自分で Git のサーバを使った場合にも当てはまりますが、毎回同じことをやっているにも関わらずいちいち調べてるのが面倒になったのでメモしておきます。

icatch-vacuum_9060011568_mini

photo credit: Ricardo Alguacil via photopin cc

目次

1. チェックアウトしたいブランチがローカルに存在しない場合

チェックアウトしたいブランチがローカルに存在しない場合です。
以下は、ブランチ名が v0.4 となっているブランチをチェックアウトする、という想定で書いてます。

まずは、本当に v0.4 のブランチがローカルに存在しないかを確認します。
ローカルに存在するブランチを確認するには git branch を実行します。

$ git branch        
* master
  v0.3.1

確かに v0.4 は存在しませんでした。
ここで一旦、リモートに存在するブランチを確認します(正確には、ネットワーク越しにブランチを確認しているのではないようですが、簡略するためにこのように書きました)。
-r オプションを付けて先ほどの git branch を実行します。

$ git branch -r
  origin/HEAD -> origin/master
  origin/master
  origin/v0.1.1
  origin/v0.2
  origin/v0.3
  origin/v0.3.1
  origin/v0.4

“origin/v0.4″ がありました。

もし、ここで対象となるブランチが表示されなければ、git fetch を実行してリポジトリ情報を最新にしてから、再度 git branch -r を実行します。

というより、作業前は常に git fetch したほうがいいかもしれないですね。
git fetch だけならファイルはマージされないのでコンフリクトの心配はないですし。

$ git fetch
  # ローカルの情報が古ければ、リポジトリ情報がダウンロードされてここに表示されます
$ git branch -r

ちなみに git branch -a とすると、ローカルとリモートのブランチが表示されます。

# git branch -a
* master
  v0.3.1
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/v0.1.1
  remotes/origin/v0.2
  remotes/origin/v0.3
  remotes/origin/v0.3.1
  remotes/origin/v0.4

さて、この v0.4 ブランチをチェックアウトします。
ブランチのチェックアウト方法はいろいろあるようですが、ボクは ↓ のコマンドでチェックアウトしています。

$ git checkout -b ローカルでのブランチ名 チェックアウトするブランチ名

checkout コマンドに -b オプションを付けると、チェックアウト後にそのブランチに切り替わります。
チェックアウト後はそのブランチで作業するので手間が省けます。

「ローカルでのブランチ名」とした部分は、書いたとおりなのですが、ローカルでのそのブランチの名称を指定します。
時間が経って忘れてしまったときにいろいろと面倒なので、リモートと同じブランチ名を指定するのがいいかなと。
わざわざ変更する必要もないでしょうし。

「チェックアウトするブランチ名」の部分は、チェックアウトしたいブランチ名を指定します。
-r オプションを付けて表示されたブランチ名を指定します。

以上を踏まえて、リモートのブランチ origin/v0.4 を v0.4 としてチェックアウトするコマンドは次の通りになります。

$ git checkout -b v0.4 origin/v0.4
Branch v0.4 set up to track remote branch v0.4 from origin.
Switched to a new branch 'v0.4'
$ git branch
  master
  v0.3.1
* v0.4

ブランチ v0.4 がチェックアウトされ、かつ、選択された状態になっています。

2. ブランチはローカルに存在するが内容が古い場合

開発をチームで行ってる場合とか、ボクみたいに自宅と職場で作業している場合とかに発生するパターンがこれに当てはまると思います。
以下は、ブランチ名が work となっているブランチに対する操作になります。

まずはローカルのブランチを確認します。

$ git branch        
  master
  v0.3.1
  v0.4
* work

操作対象のブランチ work が存在し、かつ、選択された状態になっています。

リモートリポジトリの内容をローカルリポジトリに取り込むために git fetch を実行します。

$ git fetch
remote: Counting objects: 1, done.
remote: Total 1 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (1/1), done.
From https://github.com/tomoyamkung/googlemap-sample
   54ab40a..587f353  work       -> origin/work

リモートリポジトリに push された work ブランチの最新情報が、ローカルの origin/work ブランチに取り込まれました。

この状態では情報を取り込んだだけでファイルにはマージされていません。
ファイルをマージするには merge コマンドを実行します。

work ブランチのファイルをマージするので、コマンドは git merge origin/work となります。

$ git merge origin/work
Updating 54ab40a..587f353
Fast-forward
 index.html |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

index.html に最新情報が反映された旨のメッセージが表示されています。

3. まとめ

会社では Subversion を使っていて、Git は GitHub を使うためにプライベートでしか触っていません。

git fetch をしたたけでファイルが最新の状態に更新されないとか、git fetch したあとに git merge するって何とマージするんだ?みたいなところが全然理解できませんでした。

そこら辺の不明点を次の記事で補ったのでリンクを貼っておきます。
良記事です。

Googleアドセンス用(PC)

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

関連記事

icatch_8626992930-resized

シェルスクリプトでcdしたいパスにスペースが入っている場合の対処法

cd したいパスにスペースが入っていると、パスの先頭からスペースまでを「移動したいパス」と解釈されて

記事を読む

20140811-00

64ビット版のCentOSをVMwareにインストールできない場合の対処法

Linux で検証したい作業が多かったので VMware に検証環境を作りました。OS は Cent

記事を読む

no image

VPS に Redmine を設置したときに対処したトラブル

Redmine のインストール自体は Redmine 2.3をCentOS 6.4にインストールする

記事を読む

no image

CVS でタグ間で変更があったファイルを抽出するスクリプト

今どきバージョン管理ツールに CVS を使っているところは珍しいと思うし、あまり需要はないだろうけど

記事を読む

icatch-vagrant_box_customize

VagrantのBoxファイルをカスタマイズして独自のBoxファイルを作成する

配布されている Vagrant の Box ファイルを使って検証環境を構築することが多くなってきた。

記事を読む

icatch-markdown_14bd207bd7_mini-thumbnail

Markdown記法のテキストに書いたソースコードをシンタックスハイライトするプラグイン

SublimeText3 で拡張子が md のファイルを開いたときに、文章中に書かれたプログラムのソ

記事を読む

icatch-2015-005-1

ユニットテストの偏りを防ぐ命名規則の付け方

ユニットテスト名に以下の命名規則を付けるようにして二ヶ月ぐらい経った。 正常系テストの場合: 正

記事を読む

icatch_4365495446-resized

CentOS6.5にGitをソースコードからインストールする

CentOS 6.5 の64ビット版を "Minimal" でインストールした環境で、git sta

記事を読む

no image

no space left と表示されたときの対処法

タイトルの "no space left" とは「書き込みたいけど、ディスクの飽

記事を読む

icatch_5428744075-resized

scp を使ってファイルのコピーを実行したら “command not found” と表示されたときの対処法

CentOS が起動しているサーバに scp を使ってファイルをコピーしようとコマンドを実行したら

記事を読む

Googleアドセンス用(PC)

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


6 + 七 =

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Googleアドセンス用(PC)

icatch-jersey_multi_pathparams
Jerseyの@PathParamはスラッシュの間に複数指定できる

http://hoge-api/user/{id}.{format}

icatch-vagrant_box_customize
VagrantのBoxファイルをカスタマイズして独自のBoxファイルを作成する

配布されている Vagrant の Box ファイルを使って検証環境を

icatch-2015-006-1
バリデーションチェックにJava8のOptionalを使ってスマートに書く(自分比)

Web アプリのバリデーションチェックにアノテーションを使うことが増え

icatch-2015-005-1
ユニットテストの偏りを防ぐ命名規則の付け方

ユニットテスト名に以下の命名規則を付けるようにして二ヶ月ぐらい経った。

icatch-2015-004-1
Vagrantで起動したCentOS上のOctopressをホストOSから確認する設定

タイトルの通りだが、Vagrant を使って起動した CentOS に

→もっと見る

PAGE TOP ↑