ローカルでプライベートに使用する為のgit入門

これは何?


subversion使いが、gitを知るための第一歩をメモ

gitの特徴って何? subversion使いにもやさしく教えて

分散型バージョン管理システムって何?
  • 中央リポジトリと別に、各開発環境に、ローカルリポジトリを持つ
  • ローカルにリポジトリがあるので、中央にリリースする前の一時作業の履歴管理ができる
    • 最悪、まるっと捨てることも簡単
  • ローカルにリポジトリをcloneできるので、オレオレブランチが簡単に作れる
ステージングって何?


作業ディレクトリと、ローカルリポジトリの間に、index という領域があって
ローカルリポジトリにcommitする前に、一度 index にファイルを置くことをステージングと言うっぽい


こんな感じ

作業ディレクトリ > [ステージング] > index > [commit] > ローカルリポジトリ
なんでステージングが必要?
  • バージョン管理システムで重要なのは、1つのコミットには、1つの主題
  • あとでコミットログを見た時に、1つのコミットに色んな修正がはいってると分かりづらい
    • 検索ページの〜という不具合の変更と、修正依頼のあった文言の修正
    • とかやらかすと、後でどっちかの修正だけ元に戻したい時等に、修正差分を把握しづらいよね!
  • でも、何かの作業中に割り込みで、別の作業の修正が入ったりすると、一緒にcommitしちゃいがちだよね
    • 後、作業中にちょっとしたバグみっけた時とか
  • subversionとかだと、ローカルの差分全部commitしちゃうから、複数の修正を並行してやって取る時とかにcommitできない
  • gitならステージングがあるから、1つの修正内容だけをcommitすることが簡単!!
コミットログの操作?


こんなことが可能

  • コミットに追加し忘れたファイルを追加/余計なファイルを削除
  • コミットログのメッセージの修正
  • コミットを無かったことにする


うっかりものには超便利

OSSの開発もしてないし、個人的な小規模プロジェクトでは、subversionで十分?


そうでもないよ

  • コミットログの操作と、ステージがあるおかげで、コミットログをキレイにしやすい
  • githubとか、herokuとか、git をリポジトリに使うサービスが多いから、知っとくと便利

と、言う訳でローカルでプライベートに使用する為の git コマンド一覧

初回
git init
リポジトリに入れないファイル、ディレクトリを指定
  • テキストファイル .gitignore を作成して、その中にpathを書く
ステージに追加


ステージにカレントディレクトリ以下全てを追加

  git add .


ステージに任意のファイルを追加

  git add ${path}


各ファイルの差分を見て、ステージに追加するか決める

  git add -p
commit
git commit
差分


ステージングと作業ディレクトリの差分があるファイルを見る

git status


ステージングと作業ディレクトリの差分確認

git diff


作業ディレクトリと、ローカルリポジトリ最新の差分

git diff HEAD


ローカルリポジトリの先頭と、いっこ前の差分

git diff HEAD^..HEAD


差分のあるファイル名だけ確認

git diff --name-only
ログを見る
git log


変更したファイル名も見る

git log --name-status


最新5個のログを見る

git log -5


特定のファイルのログだけ見る

git log ${path}
修正系


git add を取り消したい

git reset HEAD ${path}


新しいファイルをgit add したのを取り消す場合

git reset HEAD -- ${path}
ローカルリポジトリから持ってくる
git checkout ${path}


一つ前のバージョンの内容をローカルリポジトリから持ってくる

git checkout HEAD^ ${path}


作業ディレクトリをローカルリポジトリの最新にして、indexもキレイにする

git reset --hard HEAD
コミット後の修正


前回のコミットに今indexにある修正を追加
もしくは、コミットメッセージの修正

git commit --amend
コミットの取り消し


index と、ローカルリポジトリが一つ前の状態になるので、適時 add, commitする

git reset HEAD^

次回予告

  • bitbuket をリポジトリにして、herokuにコードをpushする例
  • git rebase と、no branchを理解する