よく使うgitコマンド


### 開発スタート
#### branch作成
* masterから開発用のbranchを作成するのであれば、masterにチェックアウトします。0

```
git checkout master
```

#### branch作成時の困りもの
* 自分がいるbranchがどこだかわからなくなります。

```
$ git branch
 201506hoge
 201507hoge
*201508renewalSites
 master
```

201508renewalSitesにいることがわかります。

* 同じrepositoryで複数開発をしている場合、masterにチェックアウト出来ない場合があります。

```
$ git checkout master
error: Your local changes to the following files would be overwritten by checkout:
hoge.php
hogehoge.php
Please, commit your changes or stash them before you can switch branches.
error: The following untracked working tree files would be overwritten by checkout:
hoge.php
Please move or remove them before you can switch branches.
Aborting
```

 * 指示に従って、commitするかstashで変更を隠してしまいます。stashの場合は

```
$ git stash save hogeStashName  
Saved working directory and index state On 201508renewalSites: hogeStashName 
HEAD is now at xxxxxxx ID defined
```

その後、問題なくmasterにチェックアウト出来るようになります。

#### いろいろなbranch作成
* -bのオプションを付けることで、branchを新規作成しチェックアウトすることになります。

```
git checkout -b localNewBranch
```
* 既にリモートに開発用branchが作られているのであればチェックアウト元を指定します。

```
it checkout -b localNewBranch origin/remoteBranch
```

* remoteBranchが無いよ、と言われるときがあります。
 
```
$ git checkout -b fuga origin/remoteBranch
fatal: git checkout: updating paths is incompatible with switching branches.
Did you intend to checkout 'origin/remoteBranch' which can not be resolved as commit?
```

* ローカルにremoteBranchの情報が無いためとなります。-aオプションを付けてあげる事によって、ローカルとリモートのbranchリストが表示されます。
 
```
$ git branch -a
 201506hoge
 201507hoge
 *201508renewalSites
 master 
 remotes/origin/201506hoge
 remotes/origin/201505DBReset
 remotes/origin/201507hoge
 remotes/origin/201508renewalSites
 remotes/origin/master
```

* そのような場合はfetchを実施します。

```
$ git fetch
 remote: Counting objects: xx, done.
 remote: Compressing objects: 100% (2/2), done.
  remote: Total 2 (delta 0), reused 0 (delta 0)
  Unpacking objects: 100% (2/2), done.
  From /path/to/repository
  *[new branch]      remoteBranch       -> origin/remoteBranch
```
 
* remoteBranchの情報が表示されるようになりました。これでリモートにある開発用branchからbranchを作成することが出来ます。

```
 $ git branch -a
 201506hoge
 201507hoge
*201508renewalSites
 master 
 remotes/origin/201506hoge
 remotes/origin/201505DBReset
 remotes/origin/201507hoge
 remotes/origin/201508renewalSites
 remotes/origin/master
 remotes/origin/remoteBranch
``` 

### ファイルを修正したり作成したら

#### gitにトラッキングしてもらいます

* gitにファイルを監視してもらうために、addします。

```
$ git add hogehoge.php
```

#### いろいろなgit add
* addするファイルが多い場合、*(アスタリスク)が使えます。 phpファイルを追加しています。

```
 $ git add *.php
``` 

* ディレクトリごと追加も出来ます。

```
 $ git add /home/hoge/website/hogehoge/
```

### 開発が一区切り着いたら

#### commit します。
* commtiします。

```
 git commit --author="hoge fuga <niwa@hogehoge.me>"
```

* コマンド実行後、commitMessage編集のテキストファイルが開かれるので、適宜コメントを残します。

### 開発が終了したら

#### push します。
* pushします。

```
git push origin HEAD
```

### とにかくリモートと一緒にしたいとき…。
#### resetします。
* リモートのmasterと一緒にしたいけれど、いろいろ面倒なのでえいやっとリモートと一緒にしたいときは

```
$ git reset --hard origin/master
```

 --hardのオプションを付けることでcommitしていない作業中のファイルはすべてmasterと同じになります。あぁ、すっきり。

* リモートのbranchと一緒にしたいけれど、いろいろ面倒なのでえいやっとリモートと一緒にしたいときは、resetの基準をmasterでは無く任意のbranchにします。あぁ、すっきり。

```
git reset --hard origin/remoteBranch
```

### 最後に
まだgitを使い始めて2ヶ月なので、説明不足な点は多々あると思います。下記のような環境ですので、いろいろ困ったことが多いです。少しずつ情報を書いていこうと思っています。

 * github
 * テスト環境
    * ec2上のCentOS 6
 * ローカル環境
    * windows7でのvagrantとvirtual boxによる仮想環境
    * cygwin
    * git クライアント tortoise