Top / GitHub / ローカル・リモートブランチとoriginのはなし

絶賛お勉強中のGitについてですが、今回整理したいのはいわゆる

git push origin master

のorigin や

git branch --set-upstream-to origin/master master

にでてくる origin/master 、ローカルブランチとリモートブランチなどの件です。 オリジンってなんなのとか、 スラつけて書いたり書かなかったり、なんてのがとてもややこしいですよね。

ここでは、git clone してから git push するまで、どのようなことが起こっているかを整理しつつ、originとか origin/master とかってナンなのってのをまとめたいと思います

git clone

まず git clone したとき、ローカルのディレクトリには

  • いわゆるローカルブランチ master
  • リモートのリポジトリを参照する リモートブランチ origin/master

が作成されます。origin/master はサーバにあるブランチだと漠然と思っていたのですが、どうもリモートのリポジトリのブランチを指し示す特別な、 'ローカルの' ブランチのようです。このことをリモートブランチと呼んでたりするんでややこしいです。

01.png

この「origin」には cloneした先のリポジトリサーバのURLが自動的に設定されていまます。

$ git config --list
....
remote.origin.url=https://github.com/xxxx/hello.git

こんな感じです

ちなみに、このリモートリポジトリのサーバ名は自由に追加することができます

$ git remote
origin
$ git remote add teamone https://github.com/xxxx/hello.git   追加(ちなみに削除はremove)
$ git remote
origin
teamone
$ git config --list
remote.origin.url=https://github.com/xxxx/hello.git
remote.teamone.url=https://github.com/masatomix/helloworld1.git

git fetch/pull/push

さて、リモートのリポジトリをcloneしたとき、ローカルには

  • ローカルブランチ master
  • リモートブランチ origin/master

が作成されました。このリモートブランチは originサーバを追跡する特別なブランチで、直接自分では操作できません。

さて、リモートリポジトリのブランチは他人がpushすることで、だんだん手元のリモートブランチとは内容がズレてくるわけですが、それを同期するコマンドがgit fetch origin master です。fetch コマンドで、リモートリポジトリのブランチの内容を、ローカルのoriginサーバを追跡しているブランチに反映させます。

fetchだけでなく pull や pushも含めて図にするとこんな感じでしょうか。

02.png

他のサーバからfetch/pull する

03.png

上記のような、複数のリモートリポジトリを用いる際も、origin とか upstreamとか名前をつけることで、落ち着いて

$ git fetch upstream master    <- upstream/master に upstreamリポジトリの変更分を更新する
$ git pull upstream master    <- upstream/master とローカルのmasterブランチに、upstreamリポジトリの変更分を反映させる

などとすることができます。ちなみに構築方法は以下の通り:

$ git clone https://github.com/xxxxxx/Spoon-Knife.git
Cloning into 'Spoon-Knife'...
remote: Counting objects: 16, done.
remote: Total 16 (delta 0), reused 0 (delta 0), pack-reused 16
Unpacking objects: 100% (16/16), done.
$ cd Spoon-Knife/
$ git branch -vv
* master d0dd1f6 [origin/master] Pointing to the guide for forking
$ git remote add upstream https://github.com/octocat/Spoon-Knife.git
$ git remote
origin
upstream
$ git config --list
remote.origin.url=https://github.com/xxxxxx/Spoon-Knife.git
remote.upstream.url=https://github.com/octocat/Spoon-Knife.git
$ git fetch upstream master
From https://github.com/octocat/Spoon-Knife
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> upstream/master
$ git pull upstream master
From https://github.com/octocat/Spoon-Knife
 * branch            master     -> FETCH_HEAD
Already up-to-date.
$

関連リンク


この記事は

選択肢 投票
おもしろかった 35  
そうでもない 1  

Top / GitHub / ローカル・リモートブランチとoriginのはなし

現在のアクセス:8348


添付ファイル: file03.png 904件 [詳細] file02.png 823件 [詳細] file01.png 1053件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2024-09-25 (水) 15:06:31 (75d)