【備忘録】コマンドラインからGitの利用

# はじめに
コマンドラインからのGit操作をことある度にググっているので、インプットとアウトプットを兼ねて本記事にまとめる。
既存プロジェクトをGitHubで管理し始める準備から、その後管理する上で覚えとくべきコマンドをまとめる。

## 前提
* Gitインストール済み
    * コマンドライン上で``git --version``が使えれば問題なし
* GitHubのアカウント作成済み
* 筆者の環境はWindows10
* コマンドラインとかコマンドプロンプトとか詳しくない人に向けて
    * ``$``はコマンドだよ、という意味
    * ``#``はコメントだよ、という意味

## 既存プロジェクトをGitHubに追加
1. GitHubのサイトにログイン
2. 新しいリポジトリ（New repository）作成
    3. 指示に従って、適宜リポジトリ名や説明の入力、公開か非公開かの選択をしていく
    4. 注意点として、ここではREADMEやライセンス、``gitignore``でリポジトリを初期化しない（``Initialize this repository with a README``にチェックを入れない）
3. 作成したリポジトリの``Quick Setup``ページで、リモートリポジトリのURLをコピー
4. コマンドラインのカレントディレクトリを、GitHubにあげたいローカルプロジェクトのディレクトリに移動
5. 下記コマンドを順に打ち込んでいけば完了

```:command
$ git init
# ローカルディレクトリをGitリポジトリとして初期化
# ざっくりいうと、ローカルプロジェクトをGitで管理できるようにする

$ git add .
# ローカルリポジトリにファイルを追加し、コミットに備えてステージします。 ファイルをステージから降ろすには、'git reset HEAD YOUR-FILE' を使います
# ざっくりいうと、ローカルリポジトリにまだ追加されていないファイルを全て追加する

$ git commit -m "First commit"
# 追跡された変更をコミットし、リモートリポジトリへのプッシュに備えます。 このコミットを削除してファイルを変更するには、'git reset --soft HEAD~1' を使い、コミットしてからファイルを再度追加してください。
# ざっくりいうと、内容に変更があったファイルの変更点をローカルリポジトリにも反映させる

$ git remote add origin [上記の3でコピーしたURLを貼る]
# 新しいリモートの設定
# ざっくりいうと、ローカルリポジトリとリモートリポジトリの連携

$ git remote -v
# 新しいリモートリポジトリの検証
# ざっくりいうと、連携できたかの確認

$ git push origin master
# origin として指定したリモートリポジトリにローカルリポジトリの変更をプッシュ
# ざっくりいうと、ローカルリポジトリの内容をリモートリポジトリにコピー
```

## 基本的なGitの使い方
前節で初期設定（？）は完了したため、本節では基本的なGitの利用方法をまとめる。

基本的に、プロジェクトに対して自分が何かしらの変更をしたら、下記の順でコマンドを実行すれば問題ない。

新しいファイルを作成した場合、``add``する。
``.``と指定することで、全ての新しく作成されたファイルを``add``する。
なお、新しいファイルを作成していない場合、この手順は飛ばして構わない。

```
$ git add .
```

ファイルの内容を変更した場合、``commit``する。
``-m "コメント"``とすることで、コミットにコメントを付け加えられる。
後から見直した際、そのコミットによる変更点が瞬時にわかるのでコメントはつけたほうが良い。

```
$ git commit -m "Improve system"
```

リモートリポジトリにおいて変更点がある場合、それをローカルリポジトリに反映させる。
これは、共同開発者がいる場合は必ず``push``する前に毎回おこなう。

```
$ git pull
```

最後に、ローカルの変更点をリモートにも反映させるため、``push``する。
``origin master``と指定することで、``master``ブランチに``push``できる。

```
$ git push origin master
```

## 応用的なGitの使い方
ブランチを切りたい、``add``や``commit``してしまったがやっぱり取り消したい、``push``したらエラー吐かれた、などという状況におけるGitの使い方を説明する。

* ブランチ切る
* ブランチ移動
* マージ
* ~~``add``の打消し~~
* ~~``commit``の打消し~~


## ブランチ
### 現在のブランチを確認

```
$ git branch
```

### ブランチを切る
新しく``hogehoge``ブランチを作って移動

```
$ git checkout -b hogehoge
```

### 新しく作ったブランチで作業
``hogehoge``ブランチで、``add``からリモートへの``push``までの作業

```
$ git add .
$ git commit -m "create hogehoge branch"
$ git push origin hogehoge
```

### 別のブランチに移動
``master``ブランチに移動

```
$ git checkout master
```

### マージ
``hogehoge``ブランチを``master``にマージさせる。

```
# マージ先のブランチに移動
$ git checkout master
# マージ
$ git merge --no-ff hogehoge
```

## git管理している途中からgitignore

1. [gitignore.io](https://www.gitignore.io/)で必要な記述を``.gitignore``ファイルに書く。
2. ``$ git add .gitignore``
3. ``$ git commit -m "Add ignore pattern"``
4. ``$ git rm -r --cached .``
5. ``$ git add .``
6. ``$ git commit -m "Reflect gitignore"``

## さいごに
コミットの打消しなどについて随時更新していく。

## 参考文献
* https://help.github.com/ja/articles/adding-an-existing-project-to-github-using-the-command-line
    * コマンドラインを使ったGitHubへの既存プロジェクトの追加
* https://qiita.com/mountcedar/items/682743c95fd3b8fc274b#%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9
    * 基本的な使い方一覧
* https://qiita.com/shuntaro_tamura/items/6c8bf792087fe5dc5103
    * ブランチ切る、マージする
* https://qiita.com/kamesennin/items/226e3839e457b342b89f
    * git管理している途中から.gitignoreを追加して、その設定を反映させる方法