今やソースコードのバージョン管理に欠かせないGit。現在では殆どの方が使いこなしている人も多いかと思います。
今回はそんなGitのコマンドで、もっと早くに知っていればよかったなというコマンドを紹介します。
バージョン
- 2.x系の最新バージョン
log編
グラフ表示する
$ git log --graph
1行で表示する
$ git log --oneline
マージコミットは表示しない
$ git log --no-merges
変更したファイルを表示
$ git log --name-status
上記を組み合わせる
$ git log --one-line --graph --no-merges --name-status
ブランチやタグを表示する
$ git log --decorate
ファイル内の行ごとの最終更新を見る
$ git blame file
ログと一緒にdiffも見る
$ git whatchanged -p
参考
http://qiita.com/take4s5i/items/15d8648405f4e7ea3039
http://qiita.com/masarufuruya/items/7480854d4bc2f0443fc1
diff編
ステージングに追加分の差分を表示
$ git diff --cached
差分ファイル名のみ表示
$ git diff --name-only <diff_branch>
diffのアルゴリズムを指定する
$ git diff --histgram(--patience)
参考
変更を一時退避する
一時領域に保存
$ git stash save "message"
一時領域に保存したリストを表示
$ git stash list
一時領域に保存したファイルを適用
$ git stash apply
適用と削除を同時に行う
$ git stash pop
使用ケース
- ある機能を作成中に別のタスクが入ってしまった場合
参考
status編
シンプルに表示する
$ git status -s
ブランチを表示する
$ git status -b
組み合わせ
$ git status -sb
commit編
コミットメッセージを修正する
$ git commit --amend
コミットをまとめる
$ git rebase -i
リベース前に変更内容をスタッシュ
$ git rebase --autostash
特定のコミットのみを適用する
$ git cherry-pick
コミットメッセージとは別のメモ的な
$ git notes add -m '要リファクタリング'
参考
http://qiita.com/LOUIS_rui/items/8bc0c9058a69a3d6de97
http://rfs.jp/server/git/gite-tech/git-cherry-pick.html
merge編
マージコミットの自動生成をしない
$ git merge --squash
参考
問題箇所を特定する
$ git bisect
参考
grep編
論理演算を使用する
$ git grep -e 'a' --and -e 'b'
$ git grep -e 'a' --or -e 'b'
過去のコミットから対象文字列を含むコミットを検索
$ git log -S 'hoge'
参考
http://qiita.com/tbaba/items/a67c8d79c6c4d0dc9b73
http://qiita.com/LOUIS_rui/items/86cf7802c4abc6fa4c1e
branch編
追跡ブランチを確認する
$ git branch -vv
追跡ブランチを追加する
$ git branch --set-upstream-to origin/[branch-name]
ブランチ作成と同時に追跡ブランチを追加する
$ git checkout -t branch_name
同じルート リポジトリのチェックアウト済みワークツリーを複数保持する
$ git worktree add branch_name
参考
http://snowlong.hatenablog.com/entry/2015/03/12/212455
http://japan.blogs.atlassian.com/2015/10/cool-features-git-2-x/
revert編
コミットをしない
$ git revert -n
tag編
sort順の変更
$ git tag --sort <type>
参考
追記
2016/1/28 Github落ちましたねー
ユニコーンさんが激おこでしたw