Pro Git 日本語版 も読むべき。。
入門git(オーム社)読書メモ
<html> <div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/427406767X/r4wh-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41k7xonwpdL._SL160_.jpg" alt="入門git" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/427406767X/r4wh-22/ref=nosim/" name="amazletlink" target="_blank">入門git</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/427406767X/r4wh-22/ref=nosim/" title="入門git" target="_blank">amazlet</a> at 11.06.17</div></div><div class="amazlet-detail">Travis Swicegood <br />オーム社 <br />売り上げランキング: 10931<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/427406767X/r4wh-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div> </html>
The Pragmatic Programmars シリーズ。約190ページとコンパクト。
「でびあんぐる」監訳なので Debian / Ubuntu に関する訳注が充実。
以下、CVS から SVN をスキップして GIT に移行しつつある nishimotz の備忘録とコメント。
基本的な仕組み
- CVS/SVN : ファイルを追跡する。
- GIT : コンテンツ(=コミット=パッチ・差分=ハッシュ値で一意に特定できる情報)を追跡する。ファイル名はコンテンツに与えられたメタデータに過ぎない。
- CVS/SVN : ファイルをaddする。変更を作業ファイルに作る。変更をリポジトリにコミットする。
- GIT : 「作業ツリー」「インデックス(ステージングエリア)」「リポジトリ」「リモートリポジトリ」といった階層。
- git addはファイルではなく「変更をaddする」。
- ステージングエリアは「コミットする前に変更を練り上げる」場所。
なお、SVN(Subversion)との連携機能は充実しているが、CVS ユーザはいったん SVN にリポジトリを移行するのが現実的な方法、とのこと。
ブランチ関連
git rebase : ブランチから変更を取りだして、別のブランチの先頭で再生する。
git merge よりも好ましい結果が得られることが多い。
(before) 3 / 1--2-+--4 (after) 1--2--3--4
基本
git add -p : 対話的パッチモード
git commit -a : 作業ツリーの最新バージョンをリポジトリにコミットする(addとcommitを同時に行う)
git diff : 作業ツリーとステージングの差分
git diff –cached : ステージングとリポジトリの差分
ブランチ(続き)
git branch -m : ブランチ名の move
ブランチは、その中で行われた最新のコミットのみを記憶する。
コミットは直前のコミットへのリンクを持つ(有向グラフ)
git checkout -b alt master : master から alt ブランチを作り(git_branchと等価)、さらに checkout を行う
ブランチのマージ
git checkout alt 作業ツリーを変更 git add git commit git checkout master git merge alt # altにおける変更がmasterにマージされ、ステージされた状態になる。 # --squash で圧縮マージになる 確認(コンフリクトの有無など) git commit
チェリーピック:コミット一つ分をマージする
コンフリクトへの対処:git mergetool ⇒ git commit
ブランチの削除 : git branch -d branchname
リモートリポジトリ関連
git blame (filename) : 「コミット名=ハッシュ値、コミットした人、タイムスタンプ、行の内容」を得る
git branch -r : リモートブランチの表示
git fetch : リモートから変更を取得
git pull : リモートから変更を取得し、同時にローカルにマージする
git push : コミットされた変更だけをリモートに送る
タグ
タグ:リポジトリの特定のコミットにブックマークのようなものをつける
git tag : 確認
git tag (tag_name) : 現在の作業ツリーのコミットにタグを作る
git tag contacts/1.1 contacts : contacts ブランチの最後のコミットにタグを打つ
タグはブランチと同じようにチェックアウトできる
リリースブランチ
リリースブランチ:通常 RB_1.2 のように名付ける
リリースの準備ができたらタグを作り、ブランチは削除すればよい
現在いるブランチは削除できないので、master に戻ってから削除
その他の機能
サブモジュール:外部レポジトリの追跡
git gc
git archive
こんな感じで使う: git archive --format=zip -o hoge-master-131220.zip master
git rebase
git reflog : 作業履歴の一覧。amend や reset も隠せない。。
git bisect : 特に run が自動問題追跡に非常に有効