これはGitやGitHubの隠された機能やよく知られていない機能の一覧だ。これはZach HolmanによるGit and GitHub SecretsというAloha Ruby Conference 2012におけるセッションを元にしている。併せてZachのスライドも参照した方が良いだろう。
- 空白の無視
- リポジトリのクローン
- Hub - Gitラッパー
- 直前のブランチ
- git.io
- Gists
- キーボード・ショートカット
- コミットからイシューを閉じる
- プルリクエストのチェックアウト
- イシューの相互リンク
- Markdownファイルでの構文強調
- 特定のユーザーによるコミット履歴
- 空のコミット
- ブランチ同士の比較
- コードの指定行の強調
- Emoji
- 素早く引用
- Gitステータスのスタイリング
- Gitログのスタイリング
- コミットログの検索
- マージ済みブランチ
- 設定済みライセンスの追加
- TODOリスト
- 推奨したい.gitconfig
- 訳注
DIFFを表示している時、そのURLに?w=1
を加えると、空白の変化による差分は表示されなくなり、コード上の変化だけを参照することができる。
リポジトリをクローンする時、URLの末尾の.git
は無くても構わない。
$ git clone https://github.com/tiimgreen/github-cheat-sheet
HubはGitのラッパーとして機能するコマンドライン・ツールで、これを利用するとGitHubをコマンドラインからとても簡単に扱えるようになる。
例えば以下のようにしてリポジトリのクローンが行える:
$ hub clone tiimgreen/toc
これは実際には以下のようなコマンドに変換される:
$ git clone git://github.com/tiimgreen/toc.git
コマンドラインで直前にいたディレクトリへ移動するには以下のようにすれば良い:
$ cd -
同じようにGitで直前のブランチをチェックアウトすることができる:
$ git checkout -
# Switched to branch 'master'
$ git checkout -
# Switched to branch 'next'
git.ioはGitHubの提供するGitHub専用のシンプルな短縮URLサービスだ。
Gistsは少量のコード群を管理する最適な手段だ。いちいちちゃんとしたリポジトリを作成する必要はない。
簡単なものとはいえ、完全なGitリポジトリとして機能するため、以下のようにすれば普通のGitリポジトリと同じようにクローンすることができるだろう:
$ git clone https://gist.github.com/tiimgreen/10545817
リポジトリをブラウザーで開いている時は、ショートカットを利用して様々なページヘ簡単にアクセスできるようになっている。
t
を押すとファイルの検索インターフェイスが起動する。
w
を押すとブランチ選択インターフェイスが起動する。
s
を押すとファイル検索フォームにフォーカスが当たる。
ファイルを参照している時(例: https://github.com/tiimgreen/github-cheat-sheet/blob/master/README.md
)にy
を押すと、参照している時の状態で固定されるURLに変更される。つまりそのファイルのコードが後に変化したとしても、そのURLでは今とまったく同じ状態で表示されるということだ。
Shift+?
を押すとそのページで使える全ショートカットが表示されるだろう。
あるコミットでイシューを解決した場合、コミットメッセージでfix/fixes/fixed
またはclose/closes/closed
に続けてイシュー番号を指定すると、指定イシューを閉じることができる。
$ git commit -m "Fix cock up, fixes #12"
こうするとイシュー#12が閉じられ、イシューにはそのコミットへの参照が自動的に追加される。
プルリクエストをローカル・リポジトリへチェックアウトするには、まず以下のようにコマンドを実行しその変更を取り込む:
$ git fetch origin '+refs/pull/*/head:refs/pull/*'
そして、プルリクエストを番号(例: 42)を指定してチェックアウトする:
$ git checkout refs/pull/42
別の方法としては、まずリモート・ブランチとして取り込み:
$ git fetch origin '+refs/pull/*/head:refs/remotes/origin/pr/*'
それから番号を指定して取り込むこともできる:
$ git checkout origin/pr/42
またプルリクエストの取り込みは、.git/configに以下の行を追加すると自動化することができる:
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = git@github.com:tiimgreen/github-cheat-sheet.git
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = git@github.com:tiimgreen/github-cheat-sheet.git
fetch = +refs/pull/*/head:refs/remotes/origin/pr/*
同じリポジトリの違うイシューへリンクを張り参照させたい場合、#
に続けてイシュー番号を指定する。そうすると自動的にリンクが作成されるだろう。
別のリポジトリのイシューの場合はuser_name/repo_name#ISSUE_NUMBER
とすれば良い(例: tiimgreen/toc#12
)。
例えばMarkdownファイルでRubyのコードを構文強調したいならば以下のようにする:
```ruby
require 'tabbit'
table = Tabbit.new('Name', 'Email')
table.add_row('Tim Green', 'tiimgreen@gmail.com')
puts table.to_s
```
こうすると以下のように表示されることになる:
require 'tabbit'
table = Tabbit.new('Name', 'Email')
table.add_row('Tim Green', 'tiimgreen@gmail.com')
puts table.to_s
GitHubではLinguistを使って言語を判別し構文強調を行っている。構文強調がサポートされている言語の一覧は言語定義YAMLファイルを参照すればわかるだろう。
特定のユーザーによるあるリポジトリへのコミット履歴のみを参照したい場合は、?author=username
をURLの末尾に付ける。
https://github.com/rails/rails/commits/master?author=dhh
--allow-empty
オプションを付けると、コードの変化がなくてもコミットを作成することができる。
$ git commit -m "Big-ass commit" --allow-empty
GitHubのブランチ比較は以下のようなURLで提供されている:
https://github.com/user/repo/compare/{range}
例えば{range}
をmaster...4-1-stable
に変更して利用する:
https://github.com/rails/rails/compare/master...4-1-stable
{range}
には以下のように日付け指定を利用することもできる:
https://github.com/rails/rails/compare/master@{1.day.ago}...master
https://github.com/rails/rails/compare/master@{2014-10-04}...master
masterブランチと特定の期間または日時との比較が行えるだろう。
コードのURLの末尾に#L52
と付けると、その行番号が強調表示される。
これは範囲指定も可能だ(例: `#L53-L60):
https://github.com/rails/rails/blob/master/activemodel/lib/active_model.rb#L53-L60
Emojiはプルリクエストやイシュー、READMEなどで:name_of_emoji:
と書くと利用できる:
:smile:
:poop:
:shipit:
:+1:
😄 💩 👍
GitHubでサポートされているEmojiの完全なリストはEmoji cheat sheet for Campfire and GitHubかAll-Github-Emoji-Iconsで確認できる。
GitHubで使われているEmojiのトップ5は以下の通りだ:
-
:shipit:
- ✨
:sparkles:
- 👎
:-1:
- 👍
:+1:
- 👏
:clap:
画像やアニメーションGIFはコミットのコメントやREADMEなどで利用できる:
![Alt Text](http://image_url.com/image.jpg)
あらゆる画像はGitHubでキャッシュされるので、画像のホスティング先が落ちていたとしても変わらず表示されるだろう。
イシューのスレッドでコメントを仕様とした時に他の人のコメントを引用したい場合、引用したい文章を選択した状態でr
を押すと、ブロック引用の記法を使ってテキストエリアにコピーされる。
$ git status
こうすることもできる:
$ git status -sb
$ git log --all --graph --decorate --oneline --abbrev-commit
注: これは後述の手順に従ってエイリアスへ追加することもできる。
指定した文字列を今までのコミット・メッセージから検索して、もっとも新しいものを表示することができる。
$ git show :/query
query
を検索したい文字列で置き換えると、最新のコミットがそのコミットにおける差分と同時に表示される。
$ git show :/typo
注: 終了するにはq
を押す。
$ git branch --merged
こうすると現在のブランチに既にマージされたブランチの一覧が表示される。
逆にまだマージされていないブランチを表示するには以下のようにする:
$ git branch --no-merged
GitHub上でリポジトリを作成する時、あらかじめ設定されているライセンスを追加することもできる:
既に存在するリポジトリであってもウェブ上のインターフェイスからファイルを作成することで追加できる。LICENSE
というファイル名にした場合、ライセンスを選択するオプションが表示されるのだ:
.gitignore
も同じように作成時に追加することも、後で追加することもできる。
In Issues and Pull requests check boxes can be added with the following syntax (notice the space): イシューやプルリクエストでは以下のように(空白に注意)書くとチェックボックスを作成することができる:
- [ ] Be awesome
- [ ] Do stuff
- [ ] Sleep
これらチェックボックスにチェックが入れられると、同時にMarkdownソースも更新される:
- [x] Be awesome
- [x] Do stuff
- [ ] Sleep
.gitconfig
とはあらゆる設定が書き込まれるファイルだ。
エイリアスはGitの呼び出し方を自分で好きなように定義できるヘルパー機能だ。例えばgit a
でgit add --all
を実行するようにすることができる。
エイリアスを追加するには~/.gitconfig
を開く、以下のような形式で記述していく:
[alias]
co = checkout
cm = commit
p = push
またはコマンドラインからも行えるだろう:
$ git config alias.new_alias git_function
例えば以下のようにする:
$ git config alias.cm commit
注: エイリアスが複数のコマンドからなる場合はクオートで括る必要がある:
$ git config alias.ac 'add -A . && commit'
おすすめの設定を挙げておこう:
エイリアス | コマンド | 設定方法 |
---|---|---|
git cm |
git commit |
git config --global alias.cm commit |
git ac |
git add . -A git commit |
git config --global alias.ac '!git add -A && git commit' |
git st |
git status -sb |
git config --global alias.st 'status -sb' |
多分今はgit comit
とタイプした場合、以下のような出力を得ることだろう:
$ git comit -m "Message"
# git: 'comit' is not a git command. See 'git --help'.
# Did you mean this?
# commit
これをcomit
とタイプした時にcommit
を実行させたい場合、自動修正を有効にすれば良い:
$ git config --global help.autocorrect 1
すると以下のような出力を得るようになるだろう:
$ git comit -m "Message"
# WARNING: You called a Git command named 'comit', which does not exist.
# Continuing under the assumption that you meant 'commit'
# in 0.1 seconds automatically...
Gitの出力をカラフルにするには以下のような設定を加えると良い:
$ git config --global color.ui 1
これはGitHub Cheat Sheetの日本語訳である。