プログラマーなら是非とも使いこなせるようにしておきたいツールの話し。

Git

バージョン管理ツールとか構成管理ツールなどと呼ばれるツールの代表格。他に、Subversion(SVN)やMercurialなどもあるが、どれか一つと言えばGit。Gitは親しみやすくはないけど、コンセプト/機能設計が素晴らしく、それを理解するだけでもプログラマーとして成長できる。

基本的にはターミナルから使う。GUI版なら、TortoiseGit(Windowsのみ?)やSourceTreeなどがある。

基本的な理解

  • コミットとは何か
  • リポジトリ、ステージ(インデックス)、作業ディレクトリ
  • ブランチ、チェックアウトとは何か
  • マージ、競合とは何か
  • ff(Fast Forward)とは何か
  • 分散リポジトリとは何か
    • リモートとローカル
    • プッシュとフェッチ
    • リモート追跡ブランチ
    • アップストリームブランチ

使いこなし

  • .gitディレクトリの中を理解する
    • HEADファイル
    • configファイル
    • branchesディレクトリ
    • objectsディレクトリ
  • 変更の一部(hunk)のみコミット
  • 変更の破棄
  • アメンド(コミットの訂正)
  • スタッシュ
  • スクオッシュ(squash merge)
  • リベース、インタラクティブリベース
  • チェリーピック
  • ブレイム(blame)
  • refspecとは何か
  • 特定のコミットの特定のファイルのみ取り出す
  • エイリアスを登録する
  • manpageを読めるようになる
  • なぜ、プッシュした後でリベースしたりアメンドしてはならないのか?
  • ブランチ管理フロー
    • Gitフロー
    • GitHubフロー

私の場合

残念ながら職場ではSVNなので、Gitは私用オンリーです。白状すると、プルリクエストしたことはありませぬ。