10分で学ぶ初心者の知らないGitコマンド一覧

# 書こうと思ったきっかけ
昨年、社内のSVNレポジトリをGit移行してから、
チームメンバーにGitコマンドについて色々質問をうけました。
そこで、メンバーに教えた便利なコマンドをまとめておきます。

基本的なコマンドは理解している事を前提に書いて行きます。
この記事内ではざっくりと説明していくので、
気になるコマンドがあれば調べてみてください。

# git reset
resetは大別して３種類あります。
resetを使いこなすとかなり幸せになれるので、必ず覚えておく事をオススメします。
参考：http://qiita.com/LOUIS_rui/items/8bc0c9058a69a3d6de97
### git reset --hard コミットハッシュ
指定したコミットハッシュのindexに一致させるときに使用します。
指定したコミット以降にindexに追加したファイルは削除されます。
気に入らないコミットをいくつかしてしまって削除したいときや、
後述のgit reflogとあわせてよく使います。

### git reset --mixed コミットハッシュ
指定したコミットハッシュのindexに一致させるときに使用します。
指定したコミット以降にindexに追加したファイルは未追跡ファイルに残ります。
指定したコミットのindex以降の変更から、
再度コミットに入れるファイルを取捨選択したり、分割してコミットする時に使用します。

### git reset --soft コミットハッシュ
指定したコミットハッシュへカレントブランチのHEADのみ移動させます。
指定したコミット以降にindexに追加したファイルはすべてステージに残ります。
複数のコミットを一つにまとめる時やコミットコメントを変更する時に使用します。

# git show-branch
複数のブランチのコミット履歴を表形式で一覧できます。
参考：http://qiita.com/t_uda/items/9b6055aa93215cb8bac1
### git show-branch --more=n
カレントブランチと他のブランチの基底コミット以前も見たい場合に使用します。
### git show-branch -a
リモートブランチを見たい場合に使用します。

# git reflog
何かやらかしてしまった時に最後の頼みの綱として使用するコマンドです。
間違えてreset --hardしたり、rebaseを繰り返しているうちに、
意味が分からなくなってしまった場合に使用します。
git reflogで過去のコミットハッシュ一覧が出てくるので、
戻りたい過去のコミットハッシュにgit reset --hard コミットハッシュ とすれば、
いつでも指定した過去に戻る事ができます。
ただ、未コミット分のファイル等は戻らないので注意してください。
参考：http://qiita.com/yaotti/items/e37c707938847aee671b

# git checkout
### git checkout -B 作成ブランチ名 既存ブランチ名
既存ブランチから新たにブランチを作成する時に使用します。
-bの場合、作成ブランチが、既に存在する場合は使用できませんが、-Bになると既存ブランチで上書き作成できます。
### git checkout -
カレントブランチに移る前のブランチに移動したい時に使用します。
### git checkout .
カレントディレクトリに含まれる全ての変更を元に戻したい時に使用します。
新しく追加したファイルは消えないので普通にシェルコマンドで消すか、git clean等で消してください。
### git checkout コミットハッシュ ファイル
指定したファイルをコミットハッシュで指定した時点の内容に更新します。

# git fetch
### git fetch --prune
git fetch時にリモートのレポジトリから既に削除されているブランチを、
ローカルレポジトリの追跡ブランチから削除します。

# git revert
既に共有のリモートブランチであるmaster等にpushしてしまったコミットを、
なかった事にしたい場合に使用し、変更打ち消しのコミットが発生します。
尚、マージコミットに対してrevertをかける場合は-mをつけます。
参考：http://qiita.com/awakia/items/5fad0c454ddc7b478ff1

# git cat-file
### git cat-file -p コミットハッシュ:ファイル名
指定したファイルのコミット時点での内容を閲覧したい場合に使用します。

# git commit
### git commit --amend
一つ前のコミットにマージしてコミットする事ができます。
コミットコメントを間違えたときや、ローカルレポジトリでの開発時に、
「とりあえずコミットしておく」みたいなコミットが増えないように使用します。

# git update-index 
### git update-index --skip-worktree 無視するファイル
.gitignoreで無視できるファイルは未追跡のファイルのみなので、
既にgitに管理されているファイルの更新を無視したい場合はこのコマンドで無視させます。
参考：http://qiita.com/usamik26/items/56d0d3ba7a1300625f92
### git update-index --no-skip-worktree 無視を解除したいファイル
skip-worktreeで無視していたファイルを、
やっぱりgitに管理させたい場合はこちらのコマンドを使います。

# git grep
### git grep 文字列
レポジトリ内の文字列検索をしたい時に使用します。
### git grep -E 正規表現
-Eや-Gを使う事で正規表現も使用可能です。

# git log
### git log --oneline
各コミットログを一行にまとめて、
一画面でなるべく多くのログを表示したい時に使います。
### git log --graph
コミットログをグラフ表示してくれます。
--decorate=fullをつける事でブランチ名も表示されます。
--onelineと併用するとさらに見やすくなります。
### git log -S
git grepはワークスペース内の文字列検索ですが、
git log -Sの場合は過去のコミットから対象文字列を含むコミットを検索することができます。
### git log --name-only
-pを使うと各コミットの変更内容が見れますが、
各コミットの変更ファイルだけを見たい時にこのオプションを使用します。
### git log --first-parent
マージコミットのマージ元のコミットログを表示したくない場合に使用します。

# git stash
現在の作業を一時的に退避させて、別のブランチに移って作業したい時などに使います。
### git stash save 保存名
git stash saveの後に名前をつけておくとどの退避ファイルか分かりやすいです。
参考：http://qiita.com/fukajun/items/41288806e4733cb9c342

# git merge
### git merge --squash
マージする時に複数のコミットを一つにまとめてマージしたい場合に使用します。

# git push
### git push :削除するリモートブランチ
リモートブランチを削除する時に使用します。
また、また、git push --delete リモートレポジトリ名 削除するリモートブランチ名 でも削除可能です。

# git cherry-pick コミットハッシュ
別のブランチのコミットをカレントブランチに適用したい時に使います。

# git tag
### git tag --contains コミットハッシュ
指定したコミットハッシュを含むタグを検索します。

# git clean 
### git clean -fdx
Gitで未追跡のファイルとディレクトリを一括削除します。
作業開始してから、色々なファイルを追加、更新したけど
やっぱりなかった事にしたい時にgit reset --hardとあわせてこのコマンドを使用します。