使い方その1(Git,GitHub資料3)

#使い方その1

ここでは、知らないと何もできないレベルの**最も基本的なこと**を書いています。

#リポジトリの作り方

まずはGitHub側で新しいリポジトリ(リモート)を作成します。

* GitHubの自分のアカウントのrepositoryへ行き、右上の「New」を選択します。
* Repository nameを入力します。何をするか分かりやすい名前にしましょう。
* Descriptionにはリポジトリの説明を入力します。ここは任意です。
* Public/Private公開したくない場合はPrivateを選択しますが、有償契約をしてない場合はpublicになります。
* Initialize this repository with a READMEはREADMEを作成するかどうかを選択します。後から作れるため未チェックでも構いません。
* Add.gitignoreでgitで無視するファイルを指定するファイルを加えるかどうかを選択します。これも後から作れるため、Noneでも構いません。
* Add a licenseはライセンス設定を加えるかを選択します。これもこれも後から作れるためNoneで構いません。
* 「Create repository」を押したら完成です。

次にローカル側でリポジトリ(ローカル)を作成します。すでにgitで管理したいローカルリポジトリがある場合は飛ばして大丈夫です。
以下のコマンドでリポジトリを作成します。
```$ mkdir [リポジトリ名]```

最後にローカルリポジトリをリモートリポジトリへ反映させます。以下はその流れです。

まずは作成したローカルリポジトリに移動します。
```$ cd [ローカルリポジトリ名]```
そして以下のコマンドを入力して、ローカルリポジトリをGitリポジトリに変換します。
```$ git init```

次にローカルリポジトリのファイルをインデックスに追加、コミットします。
```$ git add .```
```$ git commit -m “first commit”```

そして、GitHubのリモートリポジトリ情報を追加します。
**まずはGitHubの作成したリポジトリに行き、「Clone or download」を押し、そこからリポジトリ情報をコピーします**。
この時、SSH接続した場合は、「Clone with SSH」になっているかチェックしましょう。なっていない場合は「Use SSH」を押します。
していない場合はSSHがHTTPSになります。
その後以下のコマンドを打ちます。
```$ git remote add origin [コピーしたリンク]```

最後に以下のコマンドを入力します。
```$ git push -u origin master```
リモートリポジトリのほうで確認してきちんと反映されていれば完了です。

#既存のリポジトリを導入

導入したいGitHubのリポジトリに行き、「Clone or download」を押し、そこからリポジトリ情報をコピーします。
その後以下のコマンドを入力すれば完了です。
```$ git clone [コピーしたリンク]```

#頻繁に使うコマンド

**最も頻繁に使うコマンド**です。これだけは知っておきましょう。

###add, commit
基本的にGitリポジトリの内容を変更したら以下のコマンドを入力します。
```$ git add [変更したファイル]```
```$ git commit -m "[コミットメッセージ]"```
コミットメッセージは変更した内容の説明を書きます。
なるべく**変更内容が分かりやすいように**書きます。

これらの操作はゲームのセーブに似ています。これによって、いくつもセーブデータを作って好きな場所に戻したり、いらないデータを消したりなどに似た作業をすることができます。ですので**こまめにこの作業を行いましょう**。

これらのコマンドには様々な使用例があるので**このページの最後に書きます**。

###push, pull
コミットではローカルリポジトリにのみ反映されるので、pushにより**リモートリポジトリのほうに反映**させます。
```$ git push origin [ブランチ名]```
これは今いるブランチの変更をリモートリポジトリのブランチ([ブランチ名]のブランチ)にpushするコマンドになります。

pullはリモートリポジトリの内容をローカルリポジトリに反映させるコマンドです。
```$ git pull origin [ブランチ名]```
これはリモートリポジトリの[ブランチ名]ブランチの内容をローカルリポジトリの今いるブランチにpullするコマンドになります。

また、masterブランチにpush, pullするときには
```$ git push```
```$ git pull```
のみで行うことができます。

pushはadd, commitのように**毎回する必要はありません**。むしろpushすると後からcommitの修正をするのが大変になります。しかしいつまでもpushしないでいるとリモートリポジトリに反映されないままなので、良きタイミングで行いましょう。

pullは作業を始める前に一度しておくと良いでしょう。

もっと詳しい説明を**ページの最後に書いています**。

#その他の基本的なコマンド

###一個前のコミットの状態に戻したいなというとき
```$ git reset --hard HEAD```
で最後にコミットしたときの状態に戻ります。

###任意の変更を取り消したい時
```$ git revert [HEAD or commitのid (などでcommitを指定)]```
これを行うと指定したcommitが取り消されます。

###ブランチについて
ここではブランチの作り方、切り替え方だけ書き、**詳しいことは別のページに書きます**。

```$ git branch [任意のブランチ名]```
これでブランチが出来上がりました。
```$ git checkout [ブランチ名]```
これによりブランチ移動ができます。

ブランチはまとまった作業を始める時に作成するようにしましょう。積極的にブランチを分ける癖をつけると、取り返しのつかないことになりにくいです

#もっと詳しく

###add, commit
ここでリポジトリを作るときにも出てきたadd, commitとは一体何なのかを説明します。
まずはaddですが、Gitにはインデックスという「どのファイルを管理対象にするか」を記録するエリアがあります。そこに**ファイルやフォルダを追加(add)する**ためのコマンドです。

そしてcommitとは、ディレクトリやファイルの追加・変更・削除等を記録したひとかたまりのことをいいます。
言い方を変えると、**addでインデックスに追加された変更をログとして記録しているもの**です。

このcommitがとても重要です。commitするとcommitした時点の最新インデックスと、一つ前のcommitを比較し、変更点を記録します。commitを元に、過去のある時点の状態に戻すこともできます。commitにはメッセージをつけることができ、過去のcommitを見た時にどのような変更がされたのかをわかりやすくするために**「定型的で簡潔」**に書きます。

**addの使用例**
addの後に打つコマンドによってaddするものが変わります。
```$ git add .```
　今いるディレクトリ以下のすべてのファイル、ディレクトリをadd
```$ git add -A```
　リポジトリ全体のすべてのファイル、ディレクトリをadd
```$ git add -u```
　変更されたファイルをadd(新しく作ったファイルはaddされない)
```$ git add *.[任意の拡張子]```
　任意の拡張子のファイルすべてをadd
```$ git add -n```
　追加されるファイルを調べる
```$ git rm --cached```
　addしたファイルを除外

どのファイル、ディレクトリをaddしたいかを確認して使っていきましょう。

**commitの使用例**
```$ git commit -m "[コミットメッセージ]"```
　コメントをつけてcommit
```$ git commit [ファイル名]```
　特定のファイルのみをcommit
```$ git commit .```
　今いるディレクトリ以下のすべてのファイル、ディレクトリをcommit
```$ git commit -a```
　リポジトリ全体のすべてのファイル、ディレクトリをcommit
```$ git commit --amend```
　直前のcommitを取り消す

-mをつけないとエディタが起動してそこでコミットメッセージを入力しないといけないので、**vimに慣れてない場合は-mをつけましょう**。

他のコマンドと同時に使うこともできます。
例)
 
* ```$ git commit -m "[コミットメッセージ]" [ファイル名]```
*  ```$ git commit . -m "[コミットメッセージ]"```

###push, pull
ここではpush, pullのもう少し詳しい説明をします。
先ほどとりあえずでコマンドを覚えたと思いますが、originってなに？など思っていると思います。
実は
```$ git push origin [ブランチ名]```
をもっと詳しく書くと
```$ git push [リモートサーバのURL] [ローカルのブランチ名]:[リモートのブランチ名]``` 
となります。つまり、originとはリモートサーバの別名なのです。
リポジトリをつくったときに
```$ git remote add origin [コピーしたリンク]```
をしたと思います。
これは**リモートサーバのURLに“origin”というニックネームをつける**、というコマンドになります。これにより先程のコマンドがorigin(リモートサーバ)にpushするという意味になるということがわかったと思います。

次に[ローカルのブランチ名]:[リモートのブランチ名] の説明をします。これは名前の通り、ローカルの[ローカルのブランチ名]ブランチをリモートの[リモートのブランチ名]ブランチにpushするという意味になります。この時ローカルとリモートのブランチ名が同じならばそのブランチ名だけで指定することができるので、
```$ git push origin [ブランチ名]```
これだけで大丈夫ということになります。

ローカルの作業中に間違えて別のブランチでコミットしていた、という時に正しいリモートブランチにpushすることが可能になります。
この応用として以下はリモートブランチの削除コマンドとなります。
```$ git push origin :[リモートのブランチ名]```
なぜ削除になるのかというと、「何もないものをリモートのブランチにpushする」というコマンドになるので、「リモートブランチの削除」と同義になります。

また、リポジトリを作った時に
```$ git push -u origin master```
をしたと思います。この“-u”をすることによって、originとmasterがデフォルトになります。なので、masterにpushやpullするときには
```$ git push```
```$ git pull```
で大丈夫になります。


###続き
[使い方その2(Git, GitHub資料4)](https://qiita.com/proken/private/2c37c7be6f6b29d7dcf6)