GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)
- 作者: 大塚弘記
- 出版社/メーカー: 技術評論社
- 発売日: 2014/03/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (6件) を見る
GitHub実践入門2周目。
checkoutとpull
p71のチェックアウトの説明で混乱した。
$ git checkout -b feature-D origin/feature-D
これの解説が
リモートのfeature-Dブランチをチェックアウトする。
となっていたのが原因。
checkoutとは
まず、http://git-scm.com/docs/git-checkout から、git checkoutは、作業用のフォルダであるワーキングツリーに、特定のバージョンのブランチやインデックスを書き換えるコマンドである。「ブランチを切り替える」というのは、「ワーキングツリーの内容をそのブランチのものにする」を言い換えたもの。
件の例を再確認
$ git checkout -b feature-D origin/feature-D
「-b」オプションが付くと「git checkout」は、「git branch」と「git checkout」をまとめて行うことはp50あたりで述べられているが、「git branch」にリモートリポジトリを指定した際の動作の説明がなかったために理解しきれなかった。実際の流れは以下の通り。
- git branch feature-D origin/feature-D
- feature-Dというブランチをローカルリポジトリに作成
- ローカルのfeature-Dブランチに、リモートのfeature-Dブランチをpullしてくる(http://git-scm.com/docs/git-branch.html)
- git checkout feature-D
- ワーキングツリーを、ローカルのfeature-Dの内容にする(現在のブランチがfeature-Dになる)
以上から、p72の「git pull--最新のリモートリポジトリブランチを取得」が理解できた。この例では、ローカルリポジトリにすでにfeature-Dというブランチが作成済みであり、現在のワーキングディレクトリがfeature-Dブランチになっているので、branchをする必要もcheckoutする必要もなく、pullだけすればよいということだった。
pullとfetch
これも違いがよく分からなかった。この違いは「サルでも分かるGit入門」さんの解説がとても分かりやすかった。
http://www.backlog.jp/git-guide/stepup/stepup3_1.html
fetch
fetchは、リモートリポジトリの内容を読み込んでくるだけで、マージやコミットはしない。取得したブランチはFETCH_HEADで指定できる。FETCH_HEADをマージすると、pullしたのと同じ状態になる。
pull = fetch+marge