git 基本


##リポジトリ作成
```shell-session
# git init
```
>
1. 作業ディレクトリ作成
1. 作業ディレクトリへ移動
1. リポジトリ作成
>
```shell-sessionl:コマンド例
# mkdir -p /home/git_test/
# cd /home/git_test/
# git init
	Initialized empty Git repository in /home/git_test/.git/
```

##ステージング
```shell-session
# git add test.txt
```
>
1. ファイル修正
1. ステージング
>
```shell-sessionl:コマンド例
# echo $(LANG=C;date) >> date.txt
# git add date.txt
```

##コミット
```shell-session
# git commit -m '[メッセージ]' [ファイル名]
```
>
1. ファイルの作成
1. ステージング
1. コミット
>
```shell-sessionl:例
# echo $(LANG=C;date) > date.txt
# git add date.txt
# git commit -m 'message 1' date.txt
	[master (root-commit) 2d7fef7] message 1
	 1 files changed, 1 insertions(+), 0 deletions(-)
	 create mode 100644 date.txt
```

##コミットメッセージ修正
```shell-session
# git commit --amend -m '[修正後のメッセージ]'
```
>
###作業流れ
>
1. ファイル修正
1. ステージング
1. コミット（あやまったメッセージを登録してしまった！）
1. コミットメッセージ修正
>
```shell-sessionl:コマンド例
# echo $(LANG=C;date) >> date.txt
# git add date.txt
# git commit -m 'message 999' date.txt
	[master 05c45ec] message 999
	 1 files changed, 1 insertions(+), 0 deletions(-)
# git commit --amend -m 'message 2'
	[master 572cd65] message 2
	 1 files changed, 1 insertions(+), 0 deletions(-)
```

##ステージング前のファイル修正取消
```shell-session
# git checkout -- [ファイル名]
```
>
1. ファイル作成
1. 中身確認
1. ステージング
1. コミット ←ここの状態に戻す
1. ファイル修正 ←ここの状態を
1. 中身確認
1. 修正取消
>
```shell-sessionl:コマンド例
# echo $(LANG=C;date) >> date.txt
# cat date.txt
	Mon Nov 25 06:35:00 JST 2013
# git add date.txt
# git commit -m 'message 1' date.txt
	[master (root-commit) 1c7760a] message 1
	 1 files changed, 1 insertions(+), 0 deletions(-)
# echo $(LANG=C;date) >> date.txt
# cat date.txt
	Mon Nov 25 06:35:00 JST 2013
	Mon Nov 25 06:36:10 JST 2013
# git checkout -- date.txt
# cat date.txt
	Mon Nov 25 06:35:00 JST 2013
```

##ステージング取消
```shell-session
# git reset HEAD [ファイル名]
```
>
1. ファイル修正
1. ステージング
1. ステージング取消
>
```shell-sessionl:コマンド例
# echo $(LANG=C;date) >> date.txt
# git add date.txt
# git reset HEAD date.txt
	Unstaged changes after reset:
	M       date.txt
```

##コミット取消(ファイル修正はそのままの状態でステージングに戻す)
```shell-session
# git reset --soft HEAD^
```
>
1. ファイル作成
1. 中身確認
1. ステージング
1. コミット
1. ファイル修正 ←ここの状態に戻す
1. 中身確認
1. ステージング
1. コミット
1. コミット取消
1. 中身確認
>
```shell-sessionl:コマンド例
# echo $(LANG=C;date) >> date.txt
# cat date.txt
	Mon Nov 25 06:35:00 JST 2013
# git add date.txt
# git commit -m 'message 1' date.txt
	[master (root-commit) 1c7760a] message 1
	 1 files changed, 1 insertions(+), 0 deletions(-)
# echo $(LANG=C;date) >> date.txt
# cat date.txt
	Mon Nov 25 06:35:00 JST 2013
	Mon Nov 25 06:36:10 JST 2013
# git add date.txt
# git commit -m 'message 2'
	[master 02da2c6] message 2
	 1 files changed, 1 insertions(+), 0 deletions(-)
# git reset --soft HEAD^
# cat date.txt
	Mon Nov 25 06:35:00 JST 2013
	Mon Nov 25 06:36:10 JST 2013
```

##コミット取消(ファイル修正も取消）
※同時にコミットした複数のファイルがある場合、すべての修正内容が削除されるので注意

```shell-session
# git reset --hard HEAD^
```
>
1. ファイル作成
1. 中身確認
1. ステージング
1. コミット ←ここの状態に戻す
1. ファイル修正
1. 中身確認
1. ステージング
1. コミット
1. コミット取消
1. 中身確認
>
```shell-sessionl:コマンド例
# echo $(LANG=C;date) >> date.txt
# cat date.txt
	Mon Nov 25 06:35:00 JST 2013
# git add date.txt
# git commit -m 'message 1' date.txt
	[master (root-commit) 1c7760a] message 1
	 1 files changed, 1 insertions(+), 0 deletions(-)
# echo $(LANG=C;date) >> date.txt
# cat date.txt
	Mon Nov 25 06:35:00 JST 2013
	Mon Nov 25 06:36:10 JST 2013
# git add date.txt
# git commit -m 'message 2'
	[master 02da2c6] message 2
	 1 files changed, 1 insertions(+), 0 deletions(-)
#  git reset --hard HEAD^
	HEAD is now at 1c7760a message
```

##ワーキングツリーとステージングの差分確認
```shell-session
# git diff [ファイル名]
```
>
1. ファイル作成
1. ステージング
1. コミット
1. ファイル修正 ←ここと
1. ステージング
1. ファイル修正 ←ここの差分
1. ワーキングツリーとステージングの差分確認
>
```shell-sessionl:コマンド例
# echo $(LANG=C;date) >> date.txt
# git add date.txt
# git commit -m 'message 1'
# echo $(LANG=C;date) >> date.txt
# git add date.txt
# echo $(LANG=C;date) >> date.txt
# git diff date.txt
	diff --git a/date.txt b/date.txt
	index ef4ecec..b621436 100644
	--- a/date.txt
	+++ b/date.txt
	@@ -1,2 +1,3 @@
	 Mon Nov 25 06:18:32 JST 2013
	 Mon Nov 25 06:18:58 JST 2013
	+Mon Nov 25 06:19:09 JST 2013
```

##ワーキングツリーとコミットの差分確認
```shell-session
# git diff HEAD [ファイル名]
```
>
1. ファイル作成 ←ここと
1. ステージング
1. コミット
1. ファイル修正
1. ステージング
1. ファイル修正 ←ここの差分
1. ワーキングツリーとコミットの差分確認
>
```shell-sessionl:コマンド例
# echo $(LANG=C;date) >> date.txt
# git add date.txt
# git commit -m 'message 1'
# echo $(LANG=C;date) >> date.txt
# git add date.txt
# echo $(LANG=C;date) >> date.txt
# git diff HEAD date.txt
	diff --git a/date.txt b/date.txt
	index 4a6fe57..b621436 100644
	--- a/date.txt
	+++ b/date.txt
	@@ -1 +1,3 @@
	 Mon Nov 25 06:18:32 JST 2013
	+Mon Nov 25 06:18:58 JST 2013
	+Mon Nov 25 06:19:09 JST 2013
```

##ステージングとコミットの差分確認
```shell-session
# git diff --cached [ファイル名]
```
>
1. ファイル作成 ←ここと
1. ステージング
1. コミット
1. ファイル修正 ←ここの差分
1. ステージング
1. ファイル修正 ←ここの差分は表示されない
1. ステージングとコミットの差分確認
>
```shell-sessionl:コマンド例
# echo $(LANG=C;date) >> date.txt
# git add date.txt
# git commit -m 'message 1'
# echo $(LANG=C;date) >> date.txt
# git add date.txt
# echo $(LANG=C;date) >> date.txt
# git diff --cached date.txt
	diff --git a/date.txt b/date.txt
	index 4a6fe57..ef4ecec 100644
	--- a/date.txt
	+++ b/date.txt
	@@ -1 +1,2 @@
	 Mon Nov 25 06:18:32 JST 2013
	+Mon Nov 25 06:18:58 JST 2013
```