GitHub用語まとめ

#概要
GitHubの本読んだ時にまとめたメモがあったので載せます。
用語に慣れないのでまとめたんですね。

## ・リモートリポジトリ
自分または誰かのGitHub上のリポジトリ

##・ローカルリポジトリ
自分または誰かのGitHub上からクローンしてきた、自分のローカル環境のリポジトリ

##・コミット
任意のタイミングでファイルを保存する時に出来るもの
そのポイントを表すもので「ソーシャルボタン追加」等のコメントを付けて記録できる
いわば、履歴

##・HEAD
今いるブランチの最新のコミットを示すもの

##・チェックアウト
積み重ねてきたコミットの中で、任意のコミットに移動する事

##・フォーク
他人や組織のアカウント（おーがないぜーしょん）のリポジトリを自分のアカウントの配下にコピーする事
※自分のリポジトリを自分がメンバーとして所属するおーがないぜーしょんの配下にコピーする事も出来る？

##・クローン
自分のリモートリポジトリから自分のローカルリポジトリにリポジトリをダウンロードすること

▼流れ
1.Aさんのリモートリポジトリにあるスクリプトをフォークして自分のアカウント配下にコピーする
2.自分のリモートリポジトリからAさんのスクリプトをローカルリポジトリにダウンロードする　←これがクローン
3.ローカルで好きなように編集する

##・ブランチ
まずマスターブランチってのがある。
マスターブランチは初めからあるブランチです。
茎のイメージです。

マスターブランチは原則公開用のスクリプトを置いておくべきです。

そのマスターブランチから葉っぱみたいに分岐して生えるのがブランチです。
マスターブランチから分岐して新しいコミットを作成すればマスターブランチに影響を与えずにスクリプトを編集しコミットを重ねていくことが出来ます。

##・マージ
ブランチをマスターブランチに統合する事。
合体！！

##・プッシュ
ローカルで自分が作業をして作成したコミットを、自分のリモートリポジトリにアップロード（反映）する事

##・プル
誰かが編集するなどして自分のリモートリポジトリに追加されたコミットを自分のローカルリポジトリに反映させること
ちなみに誰かが編集した内容はプルリクエストとして自分宛に届く。
問題なければマージして自分のリモートリポジトリに反映させる。
問題があればレビューして修正を依頼し差し戻すことが出来る。

ちなみに・・・「リモートリポジトリの方が●コミット先行してるっちゃ」とは
誰かがプッシュしたり、自分でリモートリポジトリを直接書き換えてローカルリポジトリにはないコミットが１つリモートリポジトリに発生した事

##・コンフリクト
ブランチをマージする際に同じ場所変更が加えられた場合に発生する。（例：誰かがマスターブランチで修正してて、自分が別のブランチで修正をしててそれが同じ箇所だった場合）
ダイアログが表示され、コンフリクトした箇所のファイルが表示される。
そのファイルを正しいスクリプトに修正すればOK
修正後にコミットするとマージコミットが作成されてマージが完了する。

##・プルリクエスト
フォーク元のリモートリポジトリに自分が行った変更を取り込んでもうよう提案する事（自分のブランチを取り込んでくださいという依頼）
プッシュじゃなくてプルなのはフォーク元から見るとプルだから

▼流れ
1.Aさんのリモートリポジトリにあるスクリプトをフォークして自分のアカウント配下にコピーする
2.自分のリモートリポジトリからAさんのスクリプトをローカルリポジトリにダウンロードする（クローン）
3.ローカルでブランチを生やして好きなように編集する
4.そのブランチのコミットをプッシュする（自分のリモートリポジトリに反映）
5.GitHub上からフォーク元のリモートリポジトリにプルリクエストを送る
6.フォーク元であるリモートリポジトリのアカウントの人が内容を確認して承認しマージする
7.祝！相手のリモートリポジトリに自分の編集が反映する

※ニュープルリクエストを選択し、宛先と自分のブランチを確認しメッセージを添えてクリエイトプルリクエストする。あとは相手がプルリクエスト一覧から内容を確認してプルリクエストをマージすれば完了
※マージ前のプルリクエストを修正したい場合は、対象のブランチに修正箇所をコミットしプッシュすればプルリクエストに反映される。

##・リバート
コミットを消す手段です。
正確には過去の任意のコミットにチェックアウト（移動）し、「コミットを打ち消し」すると選択したコミットが打ち消された新しいコミットが追加されます。
要するに選んだコミットでやった作業だけがぶっ飛んだ新しいコミットが作成されるイメージです。

##・リベース
ブランチの付け根をマスターブランチに植え替えるイメージだそうです。
マスターブランチからブランチされて作られたコミットをマスターブランチに統合出来る。（マージとは違うよ！）

マージ　・・・分岐元であるマスターブランチのコミットに影響を与えず、自分が作業をしたブランチで変更した箇所が反映された、新しいコミットがマスターブランチに作成される
リベース・・・マスターブランチの元のコミットが改変されて、自分が作業をしたブランチで変更した箇所がリベース先のマスターブランチにそのまま乗っかる

わかりにくい。。。[こっち](https://liginc.co.jp/web/tool/79390)見てください。

**※注意事項※**
リベースする場合はコミットIDが変わります。（※コミットIDとは、コミットに個別に割り振られるシャーワンのハッシュ関数です。（要するに重複しないユニークな数字です））
既にリモートリポジトリ側に存在するブランチをローカル側でリベースするとプッシュが出来なくなるそうな

##・スカッシュ
複数のコミットを１つにまとめる

「あ、ここ間違ってた」→コミット、「あ、これもやん」→コミット、「うわ、これもやん」→コミット　みたいなしょうもないコミットをひとまとめにする事が出来ます。
リベースもそうですが、コミットが綺麗になります。

**※注意事項※**
スカッシュしたいコミットがリモートリポジトリに存在する場合は、履歴を改変すると他のメンバーのリポジトリと差異が出てしまいます。
そのコミットが自分のローカルリポジトリだけに存在する場合に使用しましょう。

##・フェッチ
▼前提
ローカルリポジトリにあるマスターブランチとリモートリポジトリにあるマスターブブランチとは別に、ローカルリポジトリにはリモート追跡ブランチがある。
実はクローンをすると、ただリモートリポジトリをローカルにコピーするだけではなく、origin/masterというリモート追跡ブランチが作成される。
ローカルのリポジトリにあるブランチは、このリモート追跡ブランチをミラーリングしたものである。

▼本題
リモートブランチの変更をリモート追跡ブランチに取り込むことをフェッチという
プルはフェッチした後のリモート追跡ブランチからローカルブランチにマージするという行為をまとめてやっている

フェッチとはリモートブランチの変更箇所をローカルブランチ反映させずにリモート追跡ブランチにのみダウンロードする事
ローカルリポジトリに反映させるにはマージしてやる必要がある

ちなみに他の人がリモートブランチでブランチを削除した場合にそれをフェッチするとリモート追跡ブランチに反映される（その後マージしそうだけど、削除した場合は手動でローカルブランチ側も対象のブランチを消せって書いてある。謎）

ちなみにちなみに、リモートリポジトリをクローンするとローカル上ではリモートリポジトリがoriginとネーミングされる。ローカルリポジトリ内でのリモートリポジトリの呼び名なので任意の名前に変更も可能

##・スタッシュ
未コミットを一時退避させて別のブランチの作業が出来る
※未コミットがあると別のブランチに移動出来ないのさ

##・チェリーピック
別のブランチから、任意のコミットを今いるブランチに特定のコミットを取り込める
間違って別のブランチにコミットした場合にはチェリーピックして、リバートしよう。

##・タグ機能
リリースしたアプリケーションがある時にそのバージョン番号をタグとしてコミットに付与するなどの使い方が出来る

##・でたっちどへっど
過去のコミットにチェックアウトした後にそのまま新しいコミットを作った状態（ふつうブランチしてからコミットを作る）
そのままコミットを重ねてもいいけど、次に別のコミットにチェックアウトした時に戻れなくなる。というかそのコミットがなくなる。
なぜなら、どこのブランチにも属さないから探せなくなるから
HEADってのはブランチを示すマークだが、ブランチを生やさないでコミットを作っちゃったらブランチに所属しないコミットを示すことになる。
この状態をでたっちどへっどという。

なので、チェックアウト後にブランチを生やさずにコミットしてしまった場合は新規ブランチを作成してコミットをブランチに所属させよう（一瞬チェリーピックすればいいのでは？と思ったが、多分チェリーピックはアクティブなブランチ側で操作するからその頃には問題のコミットが見えなくなっちゃうんだろう）

##・gitignore
バージョン管理したくないキャッシュファイル等gitignoreファイルに書き込みコミットする。
既にコミットしてしまったものは追跡をやめた上でgitignoreに記載する必要がある。

##・GitHub pages 
プッシュするだけでWebページが公開できるもの
静的なウェブページのみで、インタラクティブなやりとりなどは出来ない


はぁ、以上です。