http://progit.org/book/ja/ch2-3.html $ git log -p # diffも出力する $ git log --stat # 変更したファイルの一覧 $ git log --pretty=oneline #1行で $ git log --pretty=format:"%h - %an, %ar : %s" # 独自のフォーマットで $ git log --since=2.weeks # 日付指定 $ git log -(n) # n件
直前のコミットをやり直しできる!
$ git commit --amend
ステージングの取り消し
$ git reset HEAD hoge.txt
svn revertのようなもの
$ git checkout -- hoge.txt
http://progit.org/book/ja/ch3-1.html HEADは「あなたが作業しているローカルブランチへのポインタ」
testingブランチを作成(切り替えはしない)
$ git branch testing
切り替える
$ git checkout testing
作成して切り替える
$ git checkout -b issue53
Fast forward ポインタを前に進めるだけ。
タグの一覧
$ git tag
タグを作成
$ git tag v0.1
注釈付きタグの作成
$ git tag -a v1.4 -m 'my version 1.4'
タグの共有 $ git push origin v1.5 $ git push origin --tags # 共有されてないもの全部
http://progit.org/book/ja/ch3-5.html
「こっちの serverfix で、リモートの awesomebranch を更新しろ」
$ git push origin serverfix:awesomebranch
$ git push origin master
$ git push # 省略できる
リモートにデータを送信 「こっちの (何もなし) で、向こうの [remotebranch] を更新しろ」 ドッカーン。これでブランチはサーバーから消えてしまいました。
$ git push origin :serverfix
リモートのデータを取得
$ git fetch origin
fetchしたものとマージ
$ git merge origin/master
origin/serverfix が指す先から作業を開始するためのローカルブランチができあがりました。 $ git checkout -b serverfix origin/serverfix
追跡ブランチ: cloneすると自動的に追跡ブランチする。これが引数なしでgit pushやgit pullが動作する理由。
これは同じ意味。
$ git checkout --track origin/serverfix
$ git checkout -b serverfix origin/serverfix
fetch とmergeを自動でやってくれる
$ git pull
http://progit.org/book/ja/ch6-6.html
$ git submodule add git://github.com/chneukirchen/rack.git rack
submoduleのあるリポジトリをcloneした後、
$ git submodule init
$ git submodule update
サブモジュールの外部の変更を取り込むには毎回これをやる
$ git merge origin/master
$ git submodule update
サブモジュールはあるポイントしか見ない!!親プロジェクトはそのポイントを記録する
問題点。特定のバージョンをポイントしている(detached head)ので、git submodule updateで手元の変更が失われやすい
.gitmodulesを見ればわかる