Gitの基本操作



チーム開発において必須となる「Git」。
当記事では、Gitの運用方法についてまとめます。

## 基本コマンド
個人開発の場合でも、過去のバージョンに戻ることができて便利な`Git`。現場では使いこなせないと話にならないという事で、プログラミング学習においてのアウトプットには、すべて`Git`を使って行うようにしています。

`Git`は、Macならターミナルを使用して操作します。
`Git`によるバージョン管理に使用するコマンドについて解説します。

###git clone
`clone`は、GitHubにあるリポジトリからローカルのPCにコピーを作成するコマンドです。

```
$ cd ディレクトリパス
$ git clone URL
```
最初に、`cd`でリポジトリを作成したいディレクトリに移動します。
`clone`でリモートリポジトリのURLを指定します。
GitHubのリポジトリ内にあるファイルが作業ディレクトリ（ワークツリー）にコピーされます。

### git init
`init`はローカルリポジトリの初期化コマンドです。

```
$ git init
```
`init`を実行すると「.git」というローカルリポジトリをディレクトリに作成します。
例えば、testディレクトリで実行すると、下記のようになります。

```
~/D/test ❯❯❯ git init
Initialized empty Git repository in /Users/tetsu/Desktop/test/.git/
```

「.git」のディレクリが生成され、ステージングエリアとローカルリポジトリという作業領域が準備されます。
対象ディレクトリを`Git`の管理下に置くことができます。

### git add
`add`は、指定したファイルをステージングエリア（インデックス）に登録するコマンドです。

```
$ git add ファイル名
```
ステージングエリアとは、`commit`したい変更ファイルを置いておく場所です。
`git add . `のオプションで、ディレクトリ内の全ファイルを一度にステージングエリアに登録できます。

### git commit
`commit`ファイルの変更をローカルリポジトリに登録するコマンドです。

```
$ git commit --m "変更点、変更理由の記述"
```
commitは、ファイルをローカルリポジトリに記録するコマンドです。
※ --m　を忘れるとデフォルトのエディターとしてVimが立ち上がります。

コミットメッセージ入力後に :wq で保存・終了します。

### push
`push`は、リモートリポジトリに`commit`したファイルを反映されるコマンドです。

```
$ git remote add origin https://github.com/ユーザー名/リモートリポジトリ名.git
```
一番最初は、「.Gitファイル」をリモートリポジトリに関連付けします。

2回目以降は、GitHub上にあるリモートリポジトリに`commit`としたファイルをアップロードできます。

```
$ git push origin master
```

ちなみに`origin`は、「リモートリポジトリのエイリアス」を指します。

## 確認コマンド
次に、各コマンドに対する実行結果を確認する方法をみてみましょう。

### status
`status`は、Gitの現在の状況を確認するコマンドです。

```
$ git status
```

`Git`の様々な状況をまとめて確認することができます。

```
On branch master

No commits yet

Untracked files:
  (use "git add ..." to include in what will be committed)

	test.html

nothing added to commit but untracked files present (use "git add" to track)
```

### log
`log`は、`commit`の状況を確認できるコマンドです。

```
$ git log
```
現在のcommit履歴を詳しく表示させることが出来ます。

```
commit c08d7124cda5f512c7af2a3c67252f910b439bf5 (HEAD -&gt; master)
Author: ユーザ名 &lt;xxxxx@gmail.com&gt;
Date:   Sun Dec 29 10:45:34 2019 +0900

    create test.html
```
`commit`の回数が増えて見にくいときは、

```
$ git log --oneline 
```

とすることで1行ずつのスッキリとした表示にできます。

```
~/D/test ❯❯❯ git log --oneline
c08d712 (HEAD -&gt; master) create test.html
```
### diff
`diff`は、ファイルの差分を確認するコマンドです。

```
$ git diff
```
ブランチをマージする前にファイルの差分を確認するたことができます。
オプションを指定する事で様々な状態の差分を確認することが可能です。

### remote
`remote`は、リモートリポジトリURLを確認するコマンドです。

```
$ git remote -v
```
正常に登録されていれば、リモートリポジトリのURLを返します。

## 削除コマンド
Gitファイルを削除する際のコマンドを解説します。

### rm
`rm`は、ファイルを削除するコマンドです。

```
$ git rm ファイル名
```
ローカルリポジトリのファイルを削除できます。

## ブランチの運用

ブランチとは、ひとつのファイルをブランチ（枝）で分岐させて作業するための機能です。

チーム開発において、複数人が同時並行でファイルを変更する際に役立ちます。

### ブランチの作成
```
$ git branch ブランチ名
```
初期状態は、ブランチが「master」となっています。

Gitは、基本的に「masterが一番正しく、最新のものである」という状態で運用します。
### ブランチの移動

```
$ git checkout ブランチ名
```

checkoutは、ブランチを切り替えるコマンドです。

```
$ git branch
```

現在のブランチを確認することができます。

```
~/D/test ❯❯❯ git branch
* master
```

「 * 」がついているのが現在のブランチです。

ブランチで作成・変更したファイルを全てcommitを完了してから、masterにマージします。

```
git checkout master
```

masterに対して、マージしたいブレンチ名をコマンドで打ちます。

```
git merge [ブランチ名]
```

マージの衝突（CONFLICT）が起きなければ、マージ完了です。masterが最新のものになっているか確認してください。

もしコンフリクトエラーになってしまった場合は、[こちら](https://appuals.com/how-to-fix-git-error-you-need-to-resolve-your-current-index-first/)のサイトが参考になりましたのでご参照ください。