git log
log全体を見やすく表示
$ git log --decorate --oneline --graph
変更したファイルも表示したい
$ git log --stat
ファイルA.cppを変更したcommitのみを表示したい
$ git log A.cpp
--statオプションを付けると分かりやすくなるかもしれません。
N file changedの表記は全てが表示されなくなりますので注意。
Testというコメントをつけているcommitのみを表示したい
$ git log --grep Test
複数のbranchのlogを同時に見たい
$ git log branchA branchB branchC
$ git log --all
$ git log --remotes
--allはremoteとlocalの全て、--remotesはremoteだけを表示する
git add
unstageしたい
$ git reset HEAD filename
add して既にstageに乗ってしまったものを、やっぱりcommitしたくない! という時にunstageしたくなります。そんな時に。
HEAD という事は……他にも便利に使えそうですね。
このファイルだけ昔の状態に戻したり
git checkout
branchを作成してcheckoutしたい
$ git checkout -b new_branch <src_branch>
新しいブランチを切る時はgit branchよりも使いやすい
commitしてないファイルがあるせいでcheckoutできない
$ git stash; git checkout branch
$ git checkout -f branch
commitしていないデータを残したいのなら上のコマンドを、残したくないのなら下のコマンドを使うと良いかも。
stashはstackにcommitしていないファイルを保存する最強コマンドの1つ。後述。
git branch
branchのHEAD位置を移動したい
$ git branch -f branch_name dst_commit
今いるbranchは移動できません
remoteにあるbranchを知りたい
$ git branch -a
$ git branch -r
前者はリモートとローカル両方、後者はリモートだけを表示。
git fetch
もう存在しないremote branchがいつまでも残ってる
$ git fetch --prune
git diff
単語単位の賢いdiffが見たい
$ git diff --color-words
git merge
コンフリクトのお供に
$ git merge-tool
deleteの衝突
$ git rm --cached file
$ git rm file
前者はgitへの登録のみを削除し、後者はファイルの実体も合わせて削除する。
non fast forwardにしたい
$ git marge --no-ff branch_name
fast forwardだとマージするbranchの存在がログ上から分からなくなるので、developへのマージに使う事がしばしば。
git stash
まだcommitしていないファイルをstack上に移動し、最新のcommitの状態に戻す
$ git stash
$ git stash pop
$ git stash clear
stashで保存した物をpopで取り出す。clearでstack上のものを削除する。
例えば、作業をbranchを切り替える前に初めてしまったなんて時にstash -> checkout -> stash pop (自動マージ)の手順で使えます。
ignoreされているファイルもstashしたい
$ git stash -a
ignoreされているファイルに依存して、テストが通らない時に使える
複数分のstackを扱いたい
$ git stash list
$ git stash pop --index stash@{0}
listでstackを表示し、指定したものをpopする
git blame
誰がこの行を弄ったのか知りたい
$ git blame -L 1,1 A.cpp
結果
^9b6ca83 (soranoba 2014-06-25 14:49:25 +0900 1) #include<iostream>
-L start,end で行の範囲指定ができる。
結果は「コミットハッシュ値 (checkout ハッシュ値で飛べる), コミットした人, 内容」で表示される
git clean
git cloneした時の状態に戻したい
$ git clean -f -x -d
// 確認をする時はこちら
$ git clean -n -x -d
外部モジュールが~ とかよくある奴への対策の1つ。submoduleには使えないと思いますので、必ずしもgit cloneした時の状態と同じにはならないので注意。
本当は、gitに関連づけられていないファイル/ディレクトリを削除するコマンドです。