【git/GitHub】個人的に感動してスタメン入りしている小ネタ6選

git/GitHubは普通に使っても便利ですが、自身の用途に合わせて小ネタを取り入れるともっと便利になります。
この記事では個人的に感動してスタメン入りしている小ネタ達を紹介します。
ここで紹介する小ネタは細かい設定等ができるだけないようなものをピックアップしています。
どれもすぐに導入できるものですので、気になったらすぐに試してみてください。

## gitコマンドの自動予測補完 (gitの話)
私は`git status`のコマンドがとても苦手です。
全力でタイピングすると`git sttats`とか`git stattus`になってしまって`status`が上手く打てません。
こんなタイポをgit側が勝手に予測変換して`git status`にして実行してくれる設定があります。
このコマンドを打つだけです。
`$ git config --global help.autocorrect 1`

実際に見てみましょう。

```bash
$ git config --global help.autocorrect 1
$ git sttaus
WARNING: You called a Git command named 'sttaus', which does not exist.
Continuing under the assumption that you meant 'status'
On branch init
Your branch is up-to-date with 'origin/init'.
nothing to commit, working directory clean
```
bash「あなたが叩いた`sttaus`というコマンドは存在しないですよ。でもおそらく`status`のことだと思うのでそれで実行しておきますね。」って感じです。  
当たり前ですが、`status`以外でももちろん使えます。  

この小ネタの最大の弱点は「**"git"のタイポには対応できない**」ことです。  
あくまでも`git config`のオプションの一部なので`git`を間違えて`got`とか打っちゃったら
`got: command not found`になり、予測補完まで辿りつけません。

<del>エイリアス設定すれば済む話</del>

## 前のBranchへ (gitの話)
1. master -> test にブランチ移動
2. カレントブランチを test -> master に戻したい  
というとき、どうしていますか？  
昔のvivayashi「`$ git checkout master`」  
今のvivayashi「`$ git checkout -`」  
`-`で戻れます。とっても楽です。

## 引用のショートカット - Quick quotes (GitHubの話)
引用した文章の行頭に`>`をつけると、引用文のレイアウトになります。
>引用文 
> hoge fuga
> わたたたたたたたたた

PRのレビューやissueで議論を行うときによく使われるこの機能ですが、素早く`>`を付けることができます。
やり方は簡単です。
・ 引用したい文章を選択
・ `r`を入力
一瞬で選択した箇所に`>`が付いてフォームに入力されています。
GitHubの公式ブログに[デモのgif画像](https://github.com/blog/1399-quick-quotes)があるので、そちらを参考に。

## 空のコミット・プルリクエスト (git/GitHubの話)
修正したソースが何もない状態でコミットしようとしても弾かれますが、あるオプションを付けると出来るようになります。
```
$ git commit --allow-empty
```
これで空のコミット・プルリクエストを作成することができます。
用途の一つとして、コミット履歴を見やすくできます。

<例> コミット履歴(上が昔、下が最新)
・ :hatching_chick: hoge機能を追加
・ :arrow_down_small: 本質とは異なる修正をコミットします↓↓(空コミット)
・ :bath: インデント修正
・ :dragon_face: タイポ修正
・ :arrow_up_small: 寄り道終了です↑↑(空コミット)
・ :hatching_chick: fuga機能を追加

こうしておけば空コミットログ:arrow_down_small::arrow_up_small:の間に入ってるものは、本質的な修正ではないことが一目で分かるので、重点的に見てもらいたいところがレビュアーの人に伝えやすいですね。絵文字を組み合わせると尚良いと思います。
他にも、[予めPRに概要などを記しておきたい](http://fukajun.org/25)時や、[WIP PRワークフロー](http://qiita.com/a-suenami/items/129e09f8550f31e4c2da)の導入にも使えそうです。


## 空白スペース・改行のみの差分を無視 (GitHubの話)
ソースコードに何か修正を加える際、その修正とは他の箇所でインデントのズレや無駄な空白が気になって修正を加えてしまったことが何度かありました。
<del>そもそも修正を分けてコミットすればいいのですが。</del>
実際に`diff`を確認すると、赤くなった削除行が大量に出て、本来見てもらいたい修正が見難くなってしまいます。
そんなときに使えるのがこの小ネタです。
diffのURLの末尾に`?w=1`を付けると、空白や改行のみの修正行を省いて、文字の変更があった行だけを差分表示してくれます。
以前かなり古いコードに修正を入れた時、エディタが気を効かせてインデントの調整を自動でやってくれたのですが、尋常じゃない量の差分が出てきてしまったときにこの方法を知って救われました。見栄えがとっても変わります。
私の体験のように古いコードの修正(インデントや空白整理)をするときは効果を発揮します。
コミットのURL、PRのURL等、色々なところで使えるので試す価値ありです。(個人的に一番感動しました)

```
<例>
https://github.com/organization/repository/pull/prnum/files?w=1
https://github.com/organization/repository/commit/hogefugahogefuga?w=1
```


## issueをコミットメッセージから閉じる (git/GitHubの話)
コミットメッセージに`#3`のようなissue番号を入れると、そのissueにコミットログが反映され、issue管理がはかどります。便利です。
これに加え、コミットメッセージに`close #3`を付けると、`#3`のissueを自動で閉じてくれます。
ある程度時間が経ったあとに「issueを手動で閉じる祭り」が頻繁に発生する方にとってはとても便利な機能です。
`close`以外にも以下のキーワードで自動closeしてくれます。
-> closes closed fix fixes fixed resolve resolves resolved
このキーワードをわざわざ打つの忘れそうだなーと感じる方は、[コミットメッセージの雛形化](http://qiita.com/vivayashi/items/03de92f7e630c996971a#%E3%82%B3%E3%83%9F%E3%83%83%E3%83%88%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%81%AE%E9%9B%9B%E5%BD%A2%E5%8C%96)がオススメです。

## コードブロックは言語ハイライトだけじゃない(GitHubの話)



コメント内でソースコードを貼り付けたい場合はコードブロックが便利です。

インラインで文章中に使いたい場合はバッククォート前後一つ。
`source code`

複数行にまたがるソースコードの場合はバッククォート前後３つでできます。


```
package main

import fmt "fmt"

func main() {
    fmt.Printf("Hello, world;")
}
```


また、先頭のバッククォートの後に言語名を指定すると、言語事の文法を考慮してハイライトされます。

```js
function fuga() {
  var hoge = 1;
  console.log(hoge);
}

fuga();
```

実際はこう書きます。
\`\`\`js
function fuga() {
  var hoge = 1;
  console.log(hoge);
}

fuga();
\`\`\`
この言語文法のハイライトは結構知られていることかと思いますが、言語以外でもできるのです。
言語を指定する箇所に`diff`を指定してあげると
・行頭に+を付けると緑ハイライト 
・行頭に-を付けると赤ハイライト
になります。
タイポミスを伝えるのにとても便利です。差分を明確に伝えられるので、
「ここはこうやって書いた方がいいんじゃない？」的なレビューにも非常に効果的です。
\`\`\`diff
タイポしてますよ。
+ int num;
- ont num; 
\`\`\`
↓ こんな風に表示されます。

```diff
タイポしてますよ。
+ int num;
- ont num;
```

## 参考にさせていただきました。
http://qiita.com/wadako111/items/2a3a78a96384aa2c87a8
http://qiita.com/quattro_4/items/0b18bfd6ea86d4685946
https://github.com/blog/1399-quick-quotes
http://d.hatena.ne.jp/ken_c_lo/20130410/1365623063
http://fukajun.org/25
http://qiita.com/a-suenami/items/129e09f8550f31e4c2da
http://qiita.com/gotohiro55/items/aac51b2b3b0a8b37cebb
http://qa.atmarkit.co.jp/docs/markdown