gitに慣れるためのgit入門

# gitに慣れるためのgit入門

## 初めに
+ 慣れない人 <= 私。しつこいほど事前、事後確認しています。

+ 優先順位として、
 + masterブランチでリモートリポジトリまでとにかくあげる(一連の流れを覚える)
 + add, commitの前後に確認できるコマンドを覚える
 + add, commitを間違った時の取り消し方を覚える
 => add, commitが制御できる
 + branchの仕方を覚える(後は、リモートリポジトリからローカルに持っていきたいときの仕方を覚える)

がよいかな、と思います。

一般的な書籍とかだと、add -> commit (-> remote add origin) ->pushの流れの後に、branchの説明に入るのが多い気がします。個人的には、間違った時や、自分が何をadd, commitしたかを確認できたほうが安心しますし。


## 初めてのgit

+ コマンドのフローについては、[Gitポケットリファレンス-岡本-隆史](https://www.amazon.co.jp/Gitポケットリファレンス-岡本-隆史/dp/477415184X/ref=sr_1_1?s=books&ie=UTF8&qid=1478168454&sr=1-1&keywords=git+ポケット)
の付録のチートシートがかなりわかりやすいと思います。以下、自分が説明することは事前、事後確認しながらリモートリポジトリにpushするまでのプロセスです。

### ローカルリポジトリにコミットするまで

#### 自分がはまった所

+ 容量制限

>>https://help.github.com/articles/what-is-my-disk-quota/
>
>+ リポジトリサイズには物理的な上限は設定していない
> + ただし1GB以下に収めるようにという要請(お願い?)がある
> + それを超えると注意(要請)メールが送られる場合あり
> + その中の単一ファイルには100MBまでという物理的上限がある
> + 50Mを超えるファイルがあると警告を出す
> + 100Mを超えるファイルは受け付けない

+ githubのホームページで新しくリポジトリを作成しわすれていた(後述)

#### バージョン管理の初回
```bash
git init
```

#### git add

ステージングエリア(index) ... コミット前の調整ができる場所
実際にコミットが作られてしまう前に、本当に作りたいコミットを練り上げる[^add]。

[^add]: [入門git](https://www.amazon.co.jp/%E5%85%A5%E9%96%80git-Travis-Swicegood/dp/427406767X) p42 を参照

```bash
# git initしたディレクトリに移動してください。(.gitフォルダがある場所)

# 事前に大きすぎるファイルがありそうなときは、確認(100KB以上の物を抽出)
# du :  ディレクトリ内のファイル容量を表示する。 (-a:ファイルも。 -k:KB表示)
du -ak | gawk '{if ($1 > 100) print $0}'
# lsで事前に確認
ls directory-name/file*
#directory-nameのfile*をステージングエリアに挙げる
git add directory-name/file*
#もしくは対話的にaddしていく
git add -i directory-name/file*
# もしくは、一つ一つのファイルに対して、ステージングエリアに載せるかどうか、選択もできる
git add -p
#事後確認 (modified と untrackedが表示される)
git status
# addするごとにgit statusで作業内容を確認すると安心ですね！
```


#### git commit

git addした後は、確認を取ってcommitします。

```bash
#もう一回事後確認 (modified と untrackedが表示される)
git status
#事後確認したら、commit
git commit -m "changed"
#commitの事後確認2個前までのcommitを確認
git log --stat -2
```


### リモートリポジトリへの送信

+ origin ... リポジトリの場所(URL)の別名 (だいたいoriginで構わない)
+ master ... ブランチの名前

まずは、忘れずに、githubのホームページで新しくリポジトリを作成しましょう！！(僕は初回この操作を忘れてssh周りのエラーでものすごく苦しみました((+_+))
![image](http://cdn-ak.f.st-hatena.com/images/fotolife/t/tweeeety/20141119/20141119235305.png)

その後、

```bash
#初回は、originがどこのurlを指しているか紐づけを行う。2回目以降は不要
git remote add origin https://github.com/username/repository.git
#  リモートレポジトリの確認
git remote -v
# -uはorigin(ローカルリポジトリ)とmaster(ブランチ)の対応付け
# (初回のみで良い。対応付けがすんだら、git pushのみでOK)
git push -u origin master
```

Note) ちなみに1commitに1pushである必要はありません。数度add->commitしてできたコミットをまとめてpushすることも可能です。


### 間違ってコマンドを打ってしまった時の修正方法

+ 間違ったとき焦るよね。

####  git addの修正

```bash
#事後確認 (modified と untrackedが表示される)
git status
# ステージングエリアに乗せてしまったファイルをステージングエリアから外す。
git reset *
```

#### git commitの修正

```bash
# commitの事後確認2個前までのcommitを確認
git log -2
# コミットメッセージを間違えた時(エディタが開いて、コミットメッセージを直に修正できる)
git commit --amend
# または、コミットを取り消したい(取り消したいコミットが直前のものでないときに用いる)
# 5e1d749はcommit識別番号
git revert 5e1d749 
```

Note) addせずに(し忘れて)commitコマンドを打っても、"Changes not staged for commit"とでて、実際にはcommitされません。`git log --stat`で何も変わっていないことが確認できます。

### git remote add originの修正

```bash
#  リモートレポジトリの確認
git remote -v
#  リモートレポジトリの変更
git remote set-url origin https://github.com/username/repository.git
#  リモートレポジトリが変更されたことを確認
git remote -v
```

とりあえず、理解しながら数をこなそう。