Gitの説明と管理方法


# はじめに
今年新卒の初心者がgitをしっかり扱えるように示したものになります。
gitコマンドは基本的なものしか乗せておりません。
# Gitの説明とGitHubとの違い
Git(ギット)・・・プログラムソースなどの変更履歴を管理する分散型のバージョン管理システムのことです。

GitHub(ギットハブ)・・・Gitの仕組みを利用して、世界中の人々が自分の作品(プログラムコードや
デザインデータなど)を保存、公開することができるようにしたウェブサービスの名称です。

#Gitの仕組みと種類
主に使うgit用Webサービスは
![github.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416620/dd9bcb17-a0ec-6e47-c4f1-36ea73e1e35b.png)
![ビットバケット .png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416620/f3a46047-6a69-1ebf-b5be-e047fb236448.png)

この２つかなと思います。
# ソースツリーについて
 ではこの**ソースツリー**はどうなのかというと
![ソースツリー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416620/84ad2af8-537b-1ba7-c013-8bf326b762bc.png)
GitHubやBitbucketとは少し違います。どう違うかというと**Sourcetreeはツールなのです。**
GitHubやBitbucketは、コマンドで操作を行うのですが、初めのうちは少し難しいのですがこのソースツリーではボタン１つ押すだけでそれらを行ってくれます。裏側では、gitのコマンドをやっています。
もう少し難しくいうと**BitbucketやGitHubはCUIでSourcetreeはGUI**の違いがあります。


# gitの仕組み
![GIT.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416620/dad49ae3-035f-07d3-42d4-64cd9b546a96.png)
**引用元** https://qiita.com/kyoyyy/items/161b6905f45bee2efe21　
言葉でも説明すると
**１.ファイルAをステージングエリアと呼ばれる場所にあげる。**

**２.ステージングエリアにあげたものをローカルリポジトリに反映する。**

**3.ローカルリポジトリの内容をリモートリポジトリに反映する。**

この１〜３を繰り返し行って開発を行っていきます。

次はこれらをCUIで管理するための手順を説明していきます。

# 1.リポジトリを作成する
　Gitを利用するには、まずリポジトリの作成が必要になります。リポジトリ作成を行うコマンドは「git init」です。リポジトリを作成したいディレクトリでこのコマンドを実行するとgitディレクトリが作成され、Gitリポジトリの管理ファイル等がここに作成される。

```
$cd リポジトリを作成したいディレクトリ
$git init
```
こちらを行うことでGitを利用できるようになります。

# 2.ファイルをステージングエリアにあげる
```
$git add 新規ファイル名
```
こちらを行うことでステージングエリアに制作したファイルをあげることができます。

# 3.ローカルリポジトリに反映する
「git commit」これをやらないと、いつまでたってもステージングエリアの変更がローカルリポジトリに反映されないのです。

```
$git commit

$git commit -m "変更内容のコメント"
```
通常、「git commit」だけだと、コメントをいちいちテキストエディタを開いて記述することになるですが「-m」のオプションをつけてやることでその後にコメントを打つことができます。何回もやるコマンドになるので、「-m」をつけてやる方が効率的だと思うので基本「-m」をつけるのがいいと思います。

# 4.ローカルリポジトリ内容をリモートリポジトリに反映させる
こちらを行うことで一連の流れが終了になります。

```
$git push origin ブランチ名
```
これを行うことでローカルリポジトリの内容をリモートリポジトリに内容を反映することができます。

# 5.プルリクエスト
２〜３のフローを行って１機能や、完成した場合に行うものです。そのプロジェクトの責任者または上司に確認してもらうことです。OKが出るとその作業は終了し、別の作業に取り掛かることになります。OKが出ない場合は、コメントが帰ってくるので、そちらを確認し修正します。これの機能はgitそのものにはなく、margeしかなかったのですが、危ないmargeや
バグが残っているソースがmargeされてしまうと危険なので追加された機能になります。**git本来の機能ではないためCUIでプルリクエストを作成することは基本的にできません。（他のオプションをインストールすれば使えます）**なのでプルリクエストはGUIで送ることにしましょう。
![スクリーンショット 2019-06-09 16.28.12_censored.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416620/77f1fc18-7c72-fadd-2a38-da38297b6ca6.jpeg)

こんな感じでプルリクエストができます。

# 6.git pull
　このコマンドは、他のリポジトリ（リモートリポジトリなど）のデータを取得し、ローカルのブランチに統合するものです。
このコマンドが実行されると、リモート・リポジトリからの変更が現在のブランチに組み込むことができます。

```
git pull リポジトリ名　ブランチ名
```
# 7.git fetch
　これはpullに似ているのですがやっていることは全然違うものになります。

git pullは**リモートのリポジトリの内容をローカルのリポジトリに取り込み、次に、現在のローカルのブランチに対して、それに対応するリモートのブランチをマージするコマンドです。**
それに対して、git fetchは**リモートのリポジトリの内容をローカルのリポジトリに取り込むコマンドです。**

マージ処理が入っています。マージが完了すると、作業ツリーの内容がマージ後の内容に変わります。
git fetch は作業ツリーを書き換えないので、気軽に実行できます。下記がコマンドです。

```
git fetch リモートリポジトリ名 ブランチ名
```
# 8.git stash
「とあるブランチで作業中だけど、いますぐやりたいことができた。
作業すごく中途半端だからコミットはしたくない。」
というときに、stashが使えます。
stashを使用すると、コミットしていない変更を退避することができます。
stashで変更を退避させて、今すぐやりたい作業をして、退避させていた変更を戻して作業を再開することができます。
変更を退避するコマンドが下記になります。

```
$git stash save
```
コミットしていない変更がある状態で上記のコマンドを実行すると、変更した部分が退避されます。
コミットしていない変更とは、addしたものもaddしていないものもどちらも含まれます。
ブランチは変更が取り消されたきれいな状態となります。
※saveは省略可能


# 9.git rebase
 git rebase とは、作業が完了したブランチを分岐元のブランチにくっつける時に使う機能の一つです。内容としては、作業ブランチを分岐元（master 等）にくっつける手配となるので、くっつけた順番でコミットが記録されます。そのため後でコミットを確認した時（git log）に見やすい特徴があります。

**git rebase の注意点**

通常は分岐先ブランチで分岐元（master）につなぐ作業を行いますが、その逆、つまり分岐元（master）で分岐先ブランチをつなぐ作業を行うととんでもない結果を招きます。   それはブランチが消えて、分岐元（master）のみになることです。これをやってしまうと、間違いなく**プロジェクトメンバーから嫌われるので要注意です。**

これはあんまりやりたくないコマンドです。


# その他
gitにはブランチという機能があリます。ほとんどはmasterブランチでは開発は行わず、新たにブランチを作成してそこで開発を行う形になります。プルリクエストはその新しいブランチの内容を特定のブランチに統合（marge）してもいいですか？という意味になります。そのブランチを作成、切り替えるコマンドが下記になります。

```
$git branch 制作したいブランチ名

$git checkout ブランチ名
```
１行目のブランチで新たにブランチを作成し、２行目でブランチを切り替えることができます。また、変更内容を確認した場合も出てくると思うのでその場合は下のコマンドを叩くことで変更内容を確認することができます。

```
$git diff
```
その他にも、そもそもgit管理がうまくできているかどうかを確認したい場合は下記の通り叩けば確認することができます。

```
$git status
```
git commitの履歴を見たい場合は

```
$git log
```
プルリクエスト中に間違ってcommitしてしまった場合にコミットを取り消すコマンドが

```
$git revert コミット番号
```
コミット番号はgit logで確認することができます。
このぐらいは知っておきたいですね




ひん