入門Git 4章までの要約。

installation

apt-get install git-core

configuration

git config --global user.name "example"
git config --global user.email "example@example.com"
git config --global color.ui auto

revision

プロジェクトの状態
以前の状態に戻すために必要な情報
revision 間の変更に関するそのほかの情報
変更履歴を調べるために必要な情報

glossary

object
SHA-1 hash をファイル内容の名前とする
blob object
1つのファイル内容は、1つの blob object として記録される
tree object
ディレクトリの状態を記録したもの
object database
project の状態を記録する object を格納した database
HEAD
現在最新の commit。現在最新の commit の object 名の代わりになる。ちなみに、新しく作るコミットは現在のHEADの子供。
index
commit が記録する tree 状態と、 working tree 上にあるファイルの内容との間に位置する。
to stage
index に記録すること
.gitignore(ファイル)
版管理しないファイルを指定

best practice

  • 論理的に関連の無い複数の変更は、別々の commit として扱う
    • revert のときに便利になるよ!

3-way merge の条件

  • merge を行うことで、branch での変更がプロジェクトの目標に近づく
  • branch で変更した人たちの判断を信頼していること

git init

git var GIT_COMMITTER_IDENT
git var GIT_AUTHOR_IDENT

で確認を忘れずに。

git add

git add .
working tree の「現在の」ファイルの内容を index に記録する
git add -u
working tree 内で管理しているすべてのファイルの現在の状態を index に記録する
git add -p
patch 形式の出力を見ながら、どの変更をインデックスに含め、あるいは含めないのかを選択できる。1つのファイルに対して行った変更のうち一部だけを行った状態を index に記録する。dit diff 出力の最初の hunk が出力された後、Stage this hunk? と問われる。
git add -A
.gitignore で無視していないファイルすべての情報を index に登録する。version 1.6.0以前では、
git add . && git add -u

git diff

git diff
working tree と index の差分を表示する
git diff HEAD
まだ commit していないすべての変更点を確認する
git diff < object >
working tree と引数として指定された commit object が記録する差分を出力
git diff --cached
最新の commit と index に記録した状態間の変更

git commit

git commit
標準的な log message の形式
  • commit で変更する内容を1行で要約
  • 1行の空行
  • 変更した理由の説明
git commit -m "message"
editor の起動を省略することができる
git commit -a
= git add -u; git commit
git commit -v
git diff --cached の出力を見ながら log message を書ける。 git add -p で stage した後に使う。"Changed but not updated" を確認。
git commit < paths >
すでにいくつか stage した後でも、それらを超えて指定ファイルの状態だけを記録できる
git commit --amend
commit log message を修正するときに使う

git status

git status
変更 summary をgit commit を実行せずに preview できる

git log

git log (引数なし = HEAD)
commit object に記録された parent をたどって、すべての commit を順に出力
git log -p
各 commit の変更を patch 形式で出力
git log -p< 数字 >
数を指定することで、出力される commit 数を制限できる
git log --pretty=short
log message の最初の段落のみを出力
git log -2 -p --pretty=short
git log < paths >
gti log --pretty=short index.html
git log --grep=< pattern >
log message に書いた文字列で検索する。default は OR 条件。
git log --pretty=short --all-match --grep='string1' --grep='string2'
log message を AND 条件として扱う
git log --author='author'
default は OR 条件
git log --committer='committer'
default は OR 条件

git show

git show HEAD(or commit object)
指定した commit の内容を確認する

git reset

git reset
index の内容を最新の commit と同じ状態にする。今までgit add してきたすべてのファイルを引数に与えたことと同じ
git reset < paths >
指定したファイルを次回の commit から除外する

git blame

git blame < file >
ファイルの各行がどの commit で記録したのかを出力する

git revert

git revert < object >
取り消したい変更をした commit を取り消す。log message には取り消した理由を記述する

git checkout

git checkout < paths >
working tree の変更を取り消す(変更以前の状態に戻す)
git checkout HEAD < paths >
git add を使った後からでも HEAD に記録された内容に戻せる

git reset

git reset HEAD^
working tree のファイルは変化しないが、HEAD^ の状態まで index と commit を戻せる
git reset --hard HEAD^
working tree のファイルを含め、HEAD^ の状態まで戻せる

git rebase

git rebase -i
interactive (対話的) rebaseのこと。

e.g.)最新から2つめの commit で記録した変更を訂正する場合

git rebase -i HEAD~3

rebase への指示を編集する(変更したい commit 行の pick を edit に変更する)

git show
# なんらかの修正
git commit --amend
git rebase --continue