完全初心者向けGit用語集

## Gitとは
Gitとはプログラムソースなどの変更履歴を管理する**分散型のバージョン管理システム**のことです。こう聞くと難しく感じるかもしれませんが、プログラムの編集などができ、ソースコード、画像ファイルなど変更履歴を管理して複数に分けて利用することができるということです。

Gitを使うことで、**ソースコードに対しておこなった変更を複数人で共有し、効率よく開発を進めることができる**ようになります。


そもそもなぜファイルのバージョンを管理するのか？
ファイルの変更履歴を残すことで、**いつ誰がどのような変更をしたか確認**することができます。
そして、これらの履歴は**他のメンバーにも共有**することができます。
また、ファイルに何か問題が見つかっても、**前の状態(特定のバージョン)に簡単に戻せます。**
上記の特徴からバージョン管理をするととても便利だからです。

## GitHubとは
GitHubとはGitを利用した開発者を支援するWebサービスです。最初はGitとGitHubの違いが分かりませんでしたが、Gitは**ツールの名前**でGitHubは**Gitを使ったWebサービス**です。

**Git：**誰がいつどのように編集したかを正確に把握できるバージョン管理システムのこと。
**Github:** Gitの仕組みと連携して、他のユーザーとやりとりしやすくしているWEBサービスの名称。

Gitは上記の通り、**CUI仕様（操作するのにキーボードでの入力が必要）**なので、不慣れな方にとっては使いにくいです。一方でGithubは**GUI仕様（マウスだけで操作できるもの）**なので、画面上でマウスを使って操作できたり、複数のユーザーでコミュニケーションをとりやすいように機能が整備されています。

また、GitHubのようなGitのホスティングサービスは他にも<a href="https://about.gitlab.com/">Gitlab</a>や<a href="https://backlog.com/ja/">Backlog</a>、<a href="https://bitbucket.org/">Bitbucket</a>など複数あります。


## Git用語について

### Git構造
![git構造-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453316/85c987b5-9253-fe5a-ab57-35cbc6645568.jpeg)

### repository（リポジトリ）
ファイルやディレクトリの状態を記録する場所。いわゆる**保管場所**です。システムの開発プロジェクトに関連するデータの一元的な保管場所を意味します。一種のデータベースで、各工程の様々な情報を管理することができます。
![リポジトリ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453316/e441c8a2-bbf6-2ce8-74a0-1d749a4bafce.jpeg)

### local repository（ローカルリポジトリ）
**自分のパソコンの中に作られる保管場所**（リポジトリ）です。
![ローカルリポジトリ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453316/a5e065e5-c740-825b-fff2-1b646dd7d6c8.jpeg)

### remote repository（リモートリポジトリ）
自分以外の他のコンピュータの中にある、**みんなで一緒に使う保管場所**（リポジトリ）です。ネットワーク上に存在し、複数人でも管理ができるリポジトリ(GitHubなど)です。
![リモートリポジトリ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453316/26919c3d-dab0-9c6f-d261-b0b67be78d91.jpeg)

### clone（クローン）
リモートリポジトリの内容を**自分のローカル環境(自分のPC上)にコピー**するコマンドです。
![クローン.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453316/ff5bd15f-c319-df0f-74e0-8f58b861f97c.jpeg)

### fork（フォーク）
他の人のリモートリポジトリを自分のリモートリポジトリにコピーするコマンドです。
![フォーク.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453316/2068ec24-c4b7-b320-cc1a-8c8a58dc7ad6.jpeg)
forkによるワークフロー
![フォークのワークフロー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453316/7f296363-1991-14e5-dd7e-725f42b02784.jpeg)
cloneは単に任意のリポジトリをローカルにコピーするのですが、forkは自分以外のリポジトリに対して、何らかの追加機能の実装、バグ改修を行いたいときに使用します。

### init（イニット）
**リポジトリを新規作成**する時に使います。
initコマンドを実行すると、現在のディレクトリまたは指定したディレクトリに「.git」というリポジトリを構成するディレクトリが作成されます。
.gitにはGitで使用するファイルが新規に作成されるので、既に存在するリポジトリを再度初期化したい場合にもinitコマンドが使用されます。
![イニット.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453316/5be0c1dd-dfe2-5403-1b9b-bb9adf92d036.jpeg)

### pull（プル）
**リモートリポジトリの内容をローカルリポジトリに取り込む**ことができるコマンドです。データのダウンロードのようなものです。
![プル.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453316/a7eae4f8-b9ab-1d9b-b92a-f9c3f913f4a6.jpeg)

### branch（ブランチ）
**作業履歴を枝分かれさせて記録**することができます。
ひとつのプロジェクトから枝分かれをさせ、別の作業を行うことを**「ブランチを切る」**と言います。
![ブランチ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453316/94f8be7d-4d8c-fc27-ca57-aa1639fc0e95.jpeg)

### master branch（マスターブランチ）
**プロジェクトの本流のブランチ**で、リポジトリに最初にコミットをすると、masterというブランチが作成されます。
![マスターブランチ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453316/eb5dd1ae-f2f7-3306-a36b-bfa35537815e.jpeg)

### merge（マージ）
**修正変更を加えたブランチを元のブランチに統合**することができるコマンドです。
![マージ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453316/85c514c3-bd27-0e88-59a5-7cfb7b7680b9.jpeg)

### reset（リセット）
**コミットした内容を取り消す**ためのコマンドです。間違えてコミットしてしまった変更内容を取り消したい場合や、変更内容に誤りがあって取り消したい場合などによく使うコマンドです。
![リセット.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453316/79274fc4-f637-43c2-b589-ddd901bd1149.jpeg)

### revert（リバート）
**既存のコミットを取り消すためのコマンド**です。新しくコミットを追加しているだけなので、既存コミットの履歴が消えるわけではなく、コミットログには残っています。
![リバート.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453316/fa73959c-a0ff-1700-8339-6ff3e69f8967.jpeg)

### rebase（リベース）
**指定したコミットをブランチを変えて作り直す**ことができます。また、コミットをひとまとめにしたり、ログを綺麗にすることができます。
![リベース.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453316/558bdbc2-9771-7908-e1b9-6e9ea956556d.jpeg)

### cherry-pick（チェリーピック）
**他のブランチにあるコミットを自分が今いるブランチに反映**させることができます。マージは全てのコミットが取り込まれますが、チェリーピックは選択したコミットのみを取り込むことができます。
![チェリーピック.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453316/09bd1b2b-85b3-93c1-5285-e244c428204b.jpeg)

### stash（スタッシュ）
**作業中の変更を一時的に退避**させることができます。作業中に他のブランチでの作業が必要になった時などに使います。
![スタッシュ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453316/9a266f05-568c-0094-3b37-930115f8c88e.jpeg)

### conflict（コンフリクト）
**複数人が同じファイルの同じ場所の変更**をした時に起こるエラーのことです。
コンフリクトが起きたらどの変更を優先するか決めて直します。
![コンフリクト.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453316/fc73429a-b23c-c4a7-df91-3a89074e1c0f.jpeg)

### check out（チェックアウト）
今作業しているブランチから**他の作業ブランチへ切り替えたい時**に使用するコマンドです。
![チェックアウト.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453316/f5cb88ab-2189-a260-0848-6a68d19d4b47.jpeg)

### fetch（フェッチ）
リモートリポジトリで更新された**最新データをローカルリポジトリに取得**するコマンドです。
取得のみを行うので、マージが自動で行われないのがPullとの違いです。
![フェッチ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453316/0b45bb15-275d-e3ed-de0e-511499d068eb.jpeg)

### push（プッシュ）
**ローカルリポジトリの修正内容をリモートリポジトリに反映**させます。
![プッシュ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453316/6399b195-d9c9-e11d-ea4a-038c45a99bce.jpeg)

### pull request（プルリクエスト）
**自分がした変更をリポジトリに取り込んでもらうよう要求**します。
変更を本人以外がレビューしてから反映させることで一人で作ると気付かないコードの指摘やバグや記述ミスの発見ができ、コードの品質を高めます。
![プルリクエスト.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453316/ee6dfebe-0b2b-5b15-7b67-2467fb7fff71.jpeg)