macでgit使いになるために抑えておきたいコマンド（基礎編）


プログラムをgit管理する時、GUI使うのもいいけどプログラマならターミナルでクールにキメたい。いつかマスターするその時までストックしておくと幸せになれるコマンドを集めました。

基本的にこいつらさえ抑えておけば「ｯﾀｰｰｰﾝ!!」とできます。

## ■linuxコマンド基礎編
**gitの操作はターミナル上で行います。**
**まずはターミナルで生きていくために不可欠なコマンドを集めました。**

``` bash
# 現ディレクトリ配下のディレクトリ/ファイルを表示
$ ls

# 既存ディレクトリに移動する
$ cd [ディレクトリ名]

# 新規ディレクトリを作成する
$ mkdir [ディレクトリ名]

# 新規ファイルを作成する
$ touch [ファイル名]

# 既存ディレクトリ/ファイルを移動する
$ mv [ディレクトリ名/ファイル名] [移動先ディレクトリ名]

# 既存ディレクトリ/ファイルの名称を変更する
$ mv [ディレクトリ名/ファイル名] [変更後名称]

# 既存ディレクトリ/ファイルをコピーする
$ cp [ディレクトリ名/ファイル名] [コピー先ディレクトリ]

# 既存ディレクトリを削除する
$ rm -rf [ディレクトリ名]

# 既存ファイルを削除する
$ rm [ファイル名]

```

## ■git環境設定編
**そもそも[git](http://git-scm.com/)が入っていない方は左記のリンクからダウンロードしましょう。**
**gitライフを送るために必要な基本的セットアップを抑えます。**

### gitのバージョンをチェック

> 自分の開発環境は抑えておきましょう

``` bash
$ git --version

git version 2.4.0
```

### gitのユーザー設定

> 初めてgitを使う方はconfigに設定を記述する必要があります。
> コマンドを用いることでconfigファイルを開かずとも編集可能です。

``` bash
$ git config --global user.name "[ユーザー名]"
$ git config --global user.email "[アドレス]"
```

### gitの出力をカラーリング

> gitコマンドの出力結果が自動でカラーリングされます。

``` bash
$ git config --global color.ui auto
```

### gitコマンドのエイリアスを設定

> gitコマンドのショートカットを設定可能です。
> 例：`$ git config --global alias.co checkout`


``` bash
$ git config --global alias.[エイリアス] [コマンド]
```

## ■git開発入門編
**ローカルリポジトリを作成して実際にバージョン管理をしていきます。**

### ローカルリポジトリの作成

> gitファイルが生成され配下のディレクトリの変更履歴が管理されます。

``` bash
# 管理するファイルまたはアプリケーションのディレクトリで行う
$ git init
```

### ファイルの変更をコミットする

> ファイルの編集履歴を保存するには、2つの手順を踏む必要があります。
> `git add`でインデックスし、 `git commit`でコミットします。

``` bash
$ git add [ファイル名]
$ git commit -m "[コミットメッセージ]"

# インデックスのバリエーション
$ git add .   # gitが管理する全てのファイルをインデックス
$ git add -u  # 最新のコミットから変更があったもの全てインデックス
```

### 現在のブランチとインデックスの状態を確認

> GUIを使用しないと煩雑になりがちなインデックスの管理も容易です。

``` bash
$ git status

# 現在のブランチを表示
On branch master

# インデックスしていない変更がある場合
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:   sample.txt

no changes added to commit (use "git add" and/or "git commit -a")

# インデックスしているがコミットしていない変更がある場合
Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

	new file:   sample.txt

# 最新のコミット以後変更がない場合
nothing to commit, working directory clean

```

### ファイルの編集履歴を確認

> コミットの履歴を確認する方法はいくつかあります。
> 状況ごとにクールに使い分けてあげましょう。

``` bash
$ git log

commit cd84a2a7ab81d4cf309317a559f3c5XXXXXXXXXX
Author: hoge <hoge-taro@fuga.com>
Date:   Thu Jun 25 03:45:00 20XX +0900

    initial commit
    
# グラフ状で確認することも可能
$ git log --graph
$ git log --graph --oneline

# 実はデフォルトのGUIで確認することも可能
$ gitk
```

## ■git開発応用編

**以下の操作は[Github](https://github.com/)にて新規リモートリポジトリ作成後の手順です。**
**よもやアカウントを持っていないことは無いと思うので解説は無しでいきます。**

### リモートリポジトリを作成しローカルをプッシュ

> 初回のみリモートのURL指定やユーザー名・パスワードの入力が必要です。
> パスワードを入力しても画面には出てきませんがちゃんと入力できています。
> なおURLはリモートリポジトリの画面右下に表示されています。

``` bash
$ git remote add origin [リポジトリのURL]
$ git push orgin master

# SSH認証の場合のリポジトリURL
git@github.com:[登録名]/sample.git

# HTTPS認証の場合のリポジトリURL
https://github.com/[登録名]/sample.git/
```

### リモートリポジトリをローカル環境にクローン

> 指定したディレクトリ名でリモートリポジトリをローカルに複製します。
> 他者が作成したアプリケーションなどを容易に共有できます。
> なおURLはリモートリポジトリの画面右下に表示されています。

``` bash
$ git clone [リモートリポジトリのURL] [ディレクトリ名]

# HTTPS認証のURLを使用
https://github.com/[登録名]/sample.git/
```

### ローカルの変更をリモートに反映

> リモートリポジトリが整備できたらローカルの変更を管理しましょう。

``` bash
# まずはローカルで変更をコミット
$ git add -u
$ git commit -m "[コミットメッセージ]"

# その後リモートに反映
$ git push origin master

gCounting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 321 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
it pTo git@github.com:[登録名]/git-sample.git
   6eb1c4b..086288f  master -> master

```

### リモートリポジトリからローカルにプル

> 多人数開発している際のプルは不可欠です。
> リモートにある最新の状態をローカルに反映させます。

``` bash
$ git pull orgin master

From github.com:[登録名]/git-sample
 * branch            master     -> FETCH_HEAD
Already up-to-date.
```

## ■git開発発展編
**もしプッシュやプルで競合が起きてしまったら．．．**
**慌てずに競合解決してやりましょう。**

### 競合のメッセージを確認

> 例えばこんなメッセージが出てきます。ちょっと環境によって違うかもしれません。

``` bash
$ git push origin master

To https://github.com/[登録名]/sample.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/[登録名]/sample.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.
```

### 競合を解決

> 一度プルして差分をローカルで修正し再度コミット・プッシュします。

``` bash
$ git pull origin master

# 競合部分の解決
Gitのテストだよ。
<<<<<<< HEAD
二度目のコミットだよ。文字列を追加してみたよ。
=======
二度目のコミットだよ。またもやクローンしてみたよ。
>>>>>>> 1dc2c2be0154b6b3c41c865d72a645a7ddc298c4
↓
Gitのテストだよ。
二度目のコミットだよ。文字列を追加してクローンしてみたよ。

$ git add -u
$ git commit -m "[コミットメッセージ]"
$ git push origin master
```

---

以上でひと通りのコマンドは抑えられたかと思います。
今後、発展編として **全ての操作をGUI無しで** 実現すべくまとめたいと思います。（時間があったら）