入門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