Git チートシート

### 現在のブランチ表示

- 自分自身がいるブランチを表示
    - git branch
    - *(アスタリスク)が自分自身がいるブランチ
    
```
[root@Ogiman ogiman_repo]# git branch
* master
```

### ブランチ作成

- 普通にブランチ作成
    - git branch [作成するブランチ名]

```
[root@Ogiman ogiman_repo]# git branch test-branch1
[root@Ogiman ogiman_repo]# git branch
* master
  test-branch1　★作成されたブランチ
```

- ブランチ作成してそのまま作成したブランチへ移動
    - git checkout -b [作成するブランチ名]
    - 自分自身がいるブランチから新規でブランチが作成される

```
[root@Ogiman ogiman_repo]# git checkout -b test-branch2
Switched to a new branch 'test-branch2'
[root@Ogiman ogiman_repo]# git branch
  master
  test-branch1
* test-branch2　★作成して移動したブランチ
```

- 指定した既存ブランチからブランチを作成してそのまま作成したブランチへ移動
    - git checkout -b [作成するブランチ名] [指定した既存ブランチ]

```
[root@Ogiman ogiman_repo]# git checkout -b test-branch3 test-branch2
Switched to a new branch 'test-branch3'
[root@Ogiman ogiman_repo]# git branch
  master
  test-branch1
  test-branch2
* test-branch3　★作成して移動したブランチ
```


### ブランチ名の変更
- ブランチ名を変える
    - git branch -M [変更前のブランチ] [変更後のブランチ]

```
[root@Ogiman ogiman_repo]# git branch -M test-branch3 test-branch4
[root@Ogiman ogiman_repo]# git branch
  master
  test-branch1
  test-branch2
* test-branch4　★test-branch3からtest-branch4に変更された
```

### ブランチ移動

- ブランチを異動
    - git checkout [移動したいブランチ]
    
```
[root@Ogiman ogiman_repo]# git branch
  master
  test-branch1
  test-branch2
* test-branch4
[root@Ogiman ogiman_repo]# git checkout test-branch2
Switched to branch 'test-branch2'
[root@Ogiman ogiman_repo]# git branch
  master
  test-branch1
* test-branch2　★test-branch4からtest-branch2へ移動
  test-branch4
```

### ブランチ削除

- 指定したブランチを削除
    - git branch -D [指定したブランチ]

```
[root@Ogiman ogiman_repo]# git branch
  master
  test-branch1
* test-branch2
  test-branch4 ★このブランチを削除する
[root@Ogiman ogiman_repo]# git branch -D test-branch4
Deleted branch test-branch4 (was 68d346e).
[root@Ogiman ogiman_repo]# git branch
  master
  test-branch1
* test-branch2
```

### (ワークディレクトリー)変更ファイルの表示

- ワークディレクトリーの変更ファイルを表示
    - git status

```
[root@Ogiman ogiman_repo]# git status
# On branch test-branch2
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   test
#
no changes added to commit (use "git add" and/or "git commit -a")
```

### (ワークディレクトリー)変更ファイルの差分表示

- git diff [変更ファイル]

```
[root@Ogiman ogiman_repo]# git diff
diff --git a/test b/test
index a5bce3f..9daeafb 100644
--- a/test
+++ b/test
@@ -1 +1 @@
-test1
+test

[root@Ogiman ogiman_repo]# git diff test
diff --git a/test b/test
index a5bce3f..9daeafb 100644
--- a/test
+++ b/test
@@ -1 +1 @@
-test1
+test
```


### (ワークディレクトリー)変更ファイルの削除

- 指定したファイルの変更を削除
    - git checkout [指定したファイル]

```
[root@Ogiman ogiman_repo]# git status
# On branch test-branch2
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   test
#
no changes added to commit (use "git add" and/or "git commit -a")
[root@Ogiman ogiman_repo]# git checkout test
[root@Ogiman ogiman_repo]# git status
# On branch test-branch2
nothing to commit, working directory clean
```
 
### (ワークディレクトリー=>ステージ)変更ファイルの追加

- ステージに追加
    - git add [変更ファイル]

```
[root@Ogiman ogiman_repo]# git status
# On branch test-branch2
# Changes not staged for commit: ★ワークディレクトリであることを示す
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   test
#
no changes added to commit (use "git add" and/or "git commit -a")
[root@Ogiman ogiman_repo]# git add test
```

### (ステージ)変更ファイルの表示

- ステージの変更ファイルを表示
    - git status
    - ワークディレクトリーの変更ファイルを表示と同様

```
[root@Ogiman ogiman_repo]# git status
# On branch test-branch2
# Changes to be committed:　★ステージであることを示す
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   test
#
```


### (ステージ)変更ファイルの削除

- 指定したファイルをステージからワークディレクトリーに戻す
    - git reset HEAD [戻すファイル]

```
[root@Ogiman ogiman_repo]# git status
# On branch test-branch2
# Changes to be committed: ★ステージであることを示す
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   test
#
[root@Ogiman ogiman_repo]# git reset HEAD test
Unstaged changes after reset:
M       test
[root@Ogiman ogiman_repo]# git status
# On branch test-branch2
# Changes not staged for commit:　★ワークディレクトリーに戻ったことを示す
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   test
#
no changes added to commit (use "git add" and/or "git commit -a")
```


### コミットする

- commit する
    - git commit -m "コメント"
    - git commit -m "コメント"　変更ファイル
        - これでファイル単位でコミット可能

```
[root@Ogiman ogiman_repo]# git status
# On branch test-branch2
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   test
#
[root@Ogiman ogiman_repo]# git commit -m "add test v1"
[test-branch2 a1153eb] add test v1
 1 file changed, 1 insertion(+), 1 deletion(-)
```

### (ステージ=>リポジトリ)変更ファイルの追加

- pushする
    - git push origin [変更ファイルを含むブランチ]

```
[root@Ogiman ogiman_repo]# git push origin test-branch2
Username for 'https://github.com': ogiman0216
Password for 'https://ogiman0216@github.com':
Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 298 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/ogiman0216/ogiman_repo.git
   a1153eb..dd11ba3  test-branch2 -> test-branch2
[root@Ogiman ogiman_repo]#
```

### (リポジトリ)変更ファイルの削除

- [困ったときのGit](https://qiita.com/ogiman/private/9fe74c9e4848f6d45620)


### リモートブランチから最新の情報取得し、ローカルブランチ更新

- git pull
    - これはgit fetch + git merge を組みあわせ

```
[root@Ogiman ogiman_repo]# git pull
Merge made by the 'recursive' strategy.
 test | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
```

### リモートブランチから最新の情報取得して追跡リモートブランチを更新

- git fetch

```
[root@Ogiman ogiman_repo]# git fetch
```

### 文字列検索

- git grep [検索文字列]
    - リポジトリから文字列を検索する


## ログ関連
### ログの表示

- git log
    - viewで開かれる

```
commit 95ce2dfcc0eb22e2954b5cb0adeef00383af20d0
Author: ogiman0216 <ogiman@hotmail.com>
Date:   Mon Feb 19 23:40:05 2018 +0900

    Revert "add test v1"

    This reverts commit dd11ba3ee634054f0c53557b52cfd3c9fd9ca017.

commit dd11ba3ee634054f0c53557b52cfd3c9fd9ca017
Author: ogiman0216 <ogiman@hotmail.com>
Date:   Mon Feb 19 23:38:15 2018 +0900

    add test v1

commit a1153eb35ca5c41aef230985e7aa7922c361738f
Author: ogiman0216 <ogiman@hotmail.com>
Date:   Mon Feb 19 23:32:47 2018 +0900
省略
```

### 指定行のログの表示

- git log -1

```
[root@Ogiman ogiman_repo]# git log -1
commit 95ce2dfcc0eb22e2954b5cb0adeef00383af20d0
Author: ogiman0216 <ogiman@hotmail.com>
Date:   Mon Feb 19 23:40:05 2018 +0900

    Revert "add test v1"

    This reverts commit dd11ba3ee634054f0c53557b52cfd3c9fd9ca017.
[root@Ogiman ogiman_repo]# git log -2
commit 95ce2dfcc0eb22e2954b5cb0adeef00383af20d0
Author: ogiman0216 <ogiman@hotmail.com>
Date:   Mon Feb 19 23:40:05 2018 +0900

    Revert "add test v1"

    This reverts commit dd11ba3ee634054f0c53557b52cfd3c9fd9ca017.

commit dd11ba3ee634054f0c53557b52cfd3c9fd9ca017
Author: ogiman0216 <ogiman@hotmail.com>
Date:   Mon Feb 19 23:38:15 2018 +0900

    add test v1
```

### 1lineのログ表示

- git log --oneline

```
[root@Ogiman ogiman_repo]# git log --oneline
95ce2df Revert "add test v1"
dd11ba3 add test v1
a1153eb add test v1
68d346e Merge branch 'master' of https://github.com/ogiman0216/ogiman_repo
f4c9a2c Revert "third commit (#5)"
14b803b third commit (#5)
05da546 23
b461e72 Merge pull request #4 from ogiman0216/test-branch1
8cbbd0b second commit
398449c Create README.md
27cad8b first commit
e41886c delete
e993788 Merge pull request #2 from ogiman0216/mituru
544234b conflict
955baa0 Merge pull request #3 from ogiman0216/hoge
93f41a1 forth commit
270ab24 third commit
6e3bdbf Merge pull request #1 from ogiman0216/ogiman
cdfe2c3 first commit
4647b26 first commit
```

### 指定期間のログの表示

- git log --oneline --after=[開始の表示] --before=[終了の表示]

```
[root@Ogiman ogiman_repo]# git log --oneline --after=2017/08/01 --before=2018/02/19
95ce2df Revert "add test v1"
dd11ba3 add test v1
a1153eb add test v1
68d346e Merge branch 'master' of https://github.com/ogiman0216/ogiman_repo
f4c9a2c Revert "third commit (#5)"
14b803b third commit (#5)
05da546 23
b461e72 Merge pull request #4 from ogiman0216/test-branch1
8cbbd0b second commit
398449c Create README.md
27cad8b first commit
e41886c delete
```

### コミッター指定のログの表示

- git log --oneline --committer=[コミットしたアカウント]

```
[root@Ogiman ogiman_repo]# git log --oneline --committer=ogiman0216
95ce2df Revert "add test v1"
dd11ba3 add test v1
a1153eb add test v1
68d346e Merge branch 'master' of https://github.com/ogiman0216/ogiman_repo
f4c9a2c Revert "third commit (#5)"
05da546 23
8cbbd0b second commit
27cad8b first commit
e41886c delete
544234b conflict
93f41a1 forth commit
270ab24 third commit
cdfe2c3 first commit
4647b26 first commit
```
### 特定のコミットの内容を確認

- git show [commit-hash]

```
[root@Ogiman ogiman_repo]# git show cecca4f6
******
```

### コミットログの検索

- git log --grep [検索文字列]