Gitのコマンド

今は業務で使用することのないGit。
個人的に数回使ったことがある程度であやふやなままだったので、
復習がてらまとめてみました。

#まずは基本的なコマンド

## ローカルリポジトリ作成
```
$ git init
Initialized empty Git repository in /Users/usr/public_html/.git/
  #このリポジトリをgitが管理するよ
```


## ファイルをローカルリポジトリに加える
新規作成したファイル・既存ファイルの変更点をローカルリポジトリに追加。
index.htmlがステージングされた状態(コミットの前段階)。

```
$ git add index.html
  #index.htmlをローカルリポジトリに追加してね
```

## ローカルリポジトリの状態確認

```
$ git status
# ローカルリポジトリの状態を教えて

On branch master
# masterブランチに

No commits yet
# まだコミットされたものはないよ

Changes to be committed:
# コミットされる変更

  (use "git rm --cached <file>..." to unstage)
# (アンステージするには、"git rm --cached <file>..."を実行してね)

	new file:   index.html
# 新規のファイル：index.html

```

つまり、次のコミットで、新しいファイル「index.html」がリポジトリに追加される予定ってこと。


## コミット

```
$ git commit -m 'first commit'
  # 「first commit」というメッセージ付きでコミットしてね

[master (root-commit) d1d3988] first commit

 1 file changed, 1 insertion(+)
 # 1ファイル変更されたよ、１行追加されたよ

 create mode 100644 index.html
 # index.htmlをファイルモード１００６４４で作成したよ


```

## もう一度gitの状態を確認してみる

```
$ git status
# ローカルリポジトリの状態を教えて

On branch master
# masterブランチに

nothing to commit, working tree clean
# コミットするものはないよ（作業ディレクトリはクリーンだよ）

```

作業ディレクトリがクリーン 
 => 作業ディレクトリ内はリポジトリとの差異がないということ
    各ファイルの中身は全て同一、リポジトリに存在しないファイルもないということ

## git のコミット状況を確認

#### リポジトリにおける各コミットの一連の履歴を表示
新しいコミット => 古いコミットの順に表示されます。
各履歴には、下記の項目が表示されています
・コミットの内部識別子（ID）
・コミットの作成者Name
・メールアドレス
・コミットの日時
・コミットメッセージ

```
$ git log


#### ここから ####
commit 01edc32a65372b27e4fdc0da423a7ded8a9cb9a6 (HEAD -> master)
Author: usrName <test@email.com>
Date:   Tue Dec 10 22:34:22 2019 +0900

    Convert to HTML

commit d1d398874db17ae0393026070e0986f9ccddf2b3
Author: usrName <test@email.com>
Date:   Mon Dec 9 23:55:41 2019 +0900

    first commit
(END)

#### ここまで ####

```

##### 最新のコミットの詳細を表示

```
$ git show

#### ここから ####
commit 01edc32a65372b27e4fdc0da423a7ded8a9cb9a6 (HEAD -> master)
Author: usrName <test@email.com>
Date:   Tue Dec 10 22:34:22 2019 +0900

    Convert to HTML

diff --git a/index.html b/index.html
index 345e6ae..2012b4e 100644
--- a/index.html
+++ b/index.html
@@ -1 +1,5 @@
-Test
+<html>
+    <body>
+        Hello Test!!
+    </body>
+</html>
(END)

#### ここまで ####

```

##### 確認したいのコミットの詳細を表示
上記のコマンドで「コミットの内部識別子（ID）」を指定する

```
$ git show d1d398874db17ae0393026070e0986f9ccddf2b3

#### ここから ####
commit d1d398874db17ae0393026070e0986f9ccddf2b3
Author: usrName <test@email.com>
Date:   Mon Dec 9 23:55:41 2019 +0900

    first commit

diff --git a/index.html b/index.html
new file mode 100644
index 0000000..345e6ae
--- /dev/null
+++ b/index.html
@@ -0,0 +1 @@
+Test

#### ここまで ####

```


##### 現在のブランチの簡略履歴を表示
オプションがない場合は最新のリビジョンのみが表示される。

```
# 最新のリビジョンから２つ分を表示
$ git show-branch --more=2
[master] Convert to HTML
[master^] first commit
```

## コミットの差分を確認

```
$ git diff d1d398874db17ae0393026070e0986f9ccddf2b3

#### ここから ####
diff --git a/index.html b/index.html
index 345e6ae..2012b4e 100644
--- a/index.html
+++ b/index.html
@@ -1 +1,5 @@
-Test
+<html>
+    <body>
+        Hello Test!!
+    </body>
+</html>
(END)


#### ここまで ####

```

# リポジトリ内のファイルの操作

## ファイルを削除
```
# 状態を確認
$ ls
index.html test.html

# ファイルを削除
$ git rm test.html
rm 'test.html'

# コミット
$ git commit -m 'remove file'
[master 3163796] remove file
 1 file changed, 6 deletions(-)
 delete mode 100644 test.html
 
```

## ファイル名を変更

```
$ git mv index.html test.html
# index.htmlをtest.htmlに変更してね

$ git commit -m 'moved index to test'
[master 79f0f70] moved index to test
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename index.html => test.html (100%)
```

# リポジトリのコピー
git clone (コピー元のリポジトリ) (コピーしたリポジトリにつけたい名前）
下記の場合、
コピー元のリポジトリ： first_repo
コピーしたリポジトリにつけたい名前： new_repo

```
$ git clone first_repo new_repo
Cloning into 'new_repo'...
done.
 
```