読み終えたメモを残そうとしたら、
私が読んでいたのは第1版で、2014年に第2版が出たことを先ほど知って
少しショックを受けています。
Git2.0対応しているらしいですが、まぁ基本そこまで違いはないはずなので
初めて知った点などをメモしておきます。第2版はそのうち読むかも。
結構な量があるので、とりあえずGit触りたい人向けではないですが、
Gitを正しく知るという点では、是非とも読んでおいて損はないでしょう。
何しろ無料ですし。
知らなかったことなど
commitに近いタグとそのタグからのコミット数、sha1の一部を使った名前を作成
git describe
トリプルドット
git log master...experiment # experimentからはたどれるが、masterからはたどれない全てのcommit (masterに含まないexperimentログ) git log experiment...master # 逆 git log --left-right master...experiment # それぞれのコミットがどちら側に存在するのかを表示する
ステージ処理も再適用してstash applyする
git stash apply --index
stash applyの取り消し
git stash show -p stash{0} | git apply -R #
stash aipply時にコンフリクトが発生する時の対応
git stash branch を実行すると、新しいブランチを作成し、作業をスタックに隠した時のコミットをチェックアウトし
スタックにある作業を再適用し、それに成功すればスタックからその作業を削除する。
git stash branch <some_branch>
コピーされたコード片を探す
こんなことできるんですね。
git blame -C -L 141,153 <some_file>
問題を2分探索で調べる
Git - Git によるデバッグ これも、すごい。
git bisec start # 開始 git bisec bad # 現在の状態が壊れていることをgitに知らせる git bisec good v1.0 # v1.0の状態は問題がないことを伝える # すると現在の状態からv.1.0の中間地点をcheckoutしてくれるので # ここで問題が再現するか確認する。問題が再現しなければ git bisec good を実行すると # 再度、現在の状態とcheckoutした地点の中間地点をcheckoutしてくれる。 # 問題が再現すれば、git basic bad を実行すると、コミット情報(sha1)を表示する。 git bisec reset # 問題特定が完了したらresetする
問題特定のためのスクリプトを作成すれば自動化も可能。
問題がなければ0を返し、問題があれば0以外を返すスクリプトを作成する。
git bisec start HEAD v1.0 git bisec run test-error.sh
git gcの設定
git gc -auto
履歴から削除する
Git - メインテナンスとデータリカバリ
filter branchで取り除き、reflogを削除して gcし
git prune --expire で残っているobjectを削除。