GITについて

#Gitとは
Gitとは、プログラムソースなどの変更履歴を管理する分散型のバージョン管理システムのことです。プログラムの編集などができ、変更履歴も管理することができます。Gitがあることにより、昔の状態をみたり、復元したりが簡単になります。

分散型に関してはこちらの記事がわかりやすいですのでぜひ読んでみてください。
https://www.i3design.jp/in-pocket/3111

#GitHubとは
GitHubとはGitを利用した、開発者を支援するWebサービスです。　GitとGitHubの違いに私も最初は混乱しましたが、Gitはツールの名前で、GitHubはGitを使ったWebサービスの名前です。

また、GitHubのようなGitのホスティングサービス(サーバーをレンタルするサービス)ではBitbucketやBacklogなど他にもあります。GitHubは、Gitにはないけど開発者に便利な機能を追加しています。(forkなど）GitHubがあることによって共同開発がよりスムーズになりました。

 


 
用語について
ここから先はGitとGitHubを同時進行でお届けしてしまいますが、、用語についてざっくり説明して行きます。

また、Git以外のバージョン管理システム(Mercurial,Subversionなど)では同じ言葉でもニュアンスが違うものがあります。今回はGitの中の意味としていただければと思います。
![画像１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/495662/a25eb65e-8954-19c8-921b-6143b59271b0.png)

##リポジトリ(repository)
いわゆる貯蔵庫です。システムの開発プロジェクトに関連するデータの一元的な貯蔵庫を意味します。一種のデータベースで、各工程の様々な情報を管理することができます。

##ローカルリポジトリ(local repository)

Gitのリポジトリはローカルリポジトリとリモートリポジトリに分けられます。ローカルリポジトリは自分のマシン内に作られ、ワーキングツリーが所属するリポジトリのことです。

##リモートリポジトリ(remote repository)

自身の手元側にあるローカルリポジトリに対して、外部にあるリポジトリのことを指します。サーバなどネットワーク上にあるリポジトリもそれに当たります。公開、共有がスムーズなので複数人での開発に使われたり、個人開発でもネットワーク状にデータを保存したい時、共有したい時に使えます。

##フォーク(fork)

forkはGitHubが提供する機能のひとつです。fork は他の開発者のリポジトリを github上でclone(クローン）します。また、forkは、fork元への貢献を前提とします。開発を援助する前提の上で使う必要があります。

食器のフォークをイメージするとわかるように、フォーク元とフォークしたリポジトリはそれぞれ独立しており、交わることなくそれぞれの道を歩みます。


##クローン(clone)

クローンとはリモートリポジトリを手元のマシンの指定した場所に複製します。

##イニット(init)

一言でいうとリポジトリを新規作成、空のレポジトリが作成されます。また、すでに存在するリポジトリの初期化をしたい場合にも使われます。
![画像２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/495662/84591f87-1042-48bb-3e90-6d219a97c463.png)



##ワーキングツリー(working tree)
Gitの管理下に置かれた、自分が実際に作業をしているディレクトリのことです。作業ディレクトリ、ワークツリー、様々な呼ばれ方をします。

##インデックス(index)
インデックスとは、コミットする前に更新内容の一時的な保存をする場所のことで、ステージとも呼びます。

##アド(add)
ワーキングツリーにあるファイルの更新内容を、インデックスに反映するためのコマンドです。コミットする対象を登録する作業です。

##コミット(commit)
「コミット」は新規作成したファイルや編集したファイルを保存することを意味しています。新しい機能を追加したときやバグを修正したとき、作業ディレクトリ上で一区切りついた時にコミットしてそれまでの作業を一旦保存します。ファイルの変更後、ファイルを保存した上でコミットを行います。
追加・変更したファイルをリポジトリに記録します。ゲームのセーブみたいな感じです。

##コミットメッセージ(commit message)
コミットした内容を記述します。基本的に必須で書いて行きます。変更内容の要約、変更した理由（内容、詳細）などを記述します。

##ヘッド(HEAD)
今いるブランチの最新のコミットの代名詞を指します。デフォルトではmasterの先頭を表し、HEADが移動することで、使用するブランチが変更されます。

##プル(pull)

リモートリポジトリのコミットをローカルリポジトリに送り込みます。データのダウンロードのようなものです。

##ブランチ(branch)

プロジェクトを分岐させることにより、プロジェクト本体に影響を与えずに開発を行える機能です。ブランチにより、不具合が発生した場合も対応しやすく、１つのプロジェクトを同時進行で作業ができます。

また、ブランチにはたくさんの種類があります。詳しくはこちらを見ておさえておくとよいと思います。


##マスターブランチ(master branch)
プロジェクトの本流のブランチで、リポジトリに最初のコミットを行うと、masterという名前のブランチを作成されます。その後のコミットはブランチを切り替えるまでmasterブランチに追加されていきます。

![画像3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/495662/9e986eda-a7c0-73ed-ac90-1752aadf3f1f.png)
##マージ(merge)

加えた修正を統合する作業をします。変更を加えたブランチを元のブランチにマージして修正します。

##リセット(reset)

最新のコミットを取り消します。また、ステージされたファイルを取り消します。

##リバート(revart)

取り消したいコミットに対して、それを打ち消すようなコミットを新しく作成します。ただ、既存コミットの履歴が消えるわけではなく、コミットログには残っています。

##リベース(rebase)

指定したコミットをブランチを変えて作り直すことができます。また、コミットをひとまとめにしたりして、ログを綺麗にするコマンドです。

##チェリーピック(cherry-pick)

これは初心者用語としてはどうかと思いますがσ(^_^;)他のブランチのコミットを自分が今いるブランチに反映させることができます。マージはすべてのコミットが取り込まれますが、チェリーピックは選択したコミットのみ取り込むことができます。

 ![画像4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/495662/c4db1699-4130-5135-72b9-63b4ed9e1a54.png)



##スタッシュ(stash)

コミットせずに変更を退避したいときに使います。あるブランチで作業中だけど、いますぐやりたいことができた時、作業するブランチを間違えてしまった時にコミットしていない変更を一時退避することができます。

##コンフリクト(conflict)

Gitの場合同じファイルの同じ場所への変更が同時にある時に生じるエラーのことを言います。


##フェッチ(fetch)

リモートリポジトリの最新の履歴の取得を行います。取得を行うのみなので、マージが自動で行われないのがpullとの違いです。

##チェックアウト(checkout)

今作業しているブランチから出て、他の作業ブランチで作業をしたい場合に使用するコマンドです。


##プッシュ(push)

ローカルリポジトリの内容をリモートリポジトリに反映させます。

##プルリクエスト(pull request)

開発者のローカルリポジトリでの変更を他の開発者に通知するGitHubの機能です。会社やチームでコードレビューするときに使います。


引用先リンク：https://zukulog098r.com/git/