SourceTreeで使うgit用語とコマンド

# はじめに
使い始めて約一年、最初よりも操作に慣れてきたSourceTree。
それでも聞いたことのない用語や、使ったことのない機能がまだ多くあるので復習も兼ねてまとめました。

## もくじ
- [はじめに](#はじめに)
- [リポジトリ（Repository）](#リポジトリ（Repository）)
  - [リモートリポジトリ(Remote Repository)](#リモートリポジトリ(RemoteRepository))
  - [ローカルリポジトリ（Local Repository）](#ローカルリポジトリ（LocalRepository）)
- [クローン（Clone）](#クローン（Clone）)
- [コミット（Commit）](#コミット（Commit）)
- [プッシュ（Push）](#プッシュ（Push）)
- [ブランチ（Branch）](#ブランチ（Branch）)
- [チェックアウト（Checkout）](#チェックアウト（Checkout）)
- [スタッシュ（Stash）](#スタッシュ（Stash）)
- [マージ（Merge）](#マージ（Merge）)
- [フェッチ（Fetch）](#フェッチ（Fetch）)
- [プル（Pull）](#プル（Pull）)
- [リベース（Rebase）](#リベース（Rebase）)
- [チェリーピック（Cherry-pick）](#チェリーピック（Cherry-pick）)
- [まとめ](#まとめ)

## リポジトリ（Repository）
![勉強会_アートボード 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950313/d1d987a5-6235-4d26-9772-2f685b184d4e.png)
ファイル、ディレクトリのバージョン管理を保存している場所。貯蔵庫のイメージ。
この中に今まで行ってきた変更や修正を溜めていく。
リポジトリの種類は以下二つ。
![勉強会_アートボード 1 のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950313/9aed687f-7764-c387-3f91-db3336a8803e.png)

### リモートリポジトリ(Remote Repository)
サーバ上に存在するファイルやディレクトリの変更履歴を保存するリポジトリ＝**外部にあるリポジトリ**。
公開、共有がスムーズなので複数人での開発に使われたり、個人開発でもネットワーク状にデータを保存したい時、共有したい時に使える。
自分含む複数の人が同時に見ることが可能で、保存されている変更履歴を自分のローカルリポジトリに落とすことができる。
リモートリポジトリ上のファイルを直接編集も可能だが、事故るので行わない。

### ローカルリポジトリ（Local Repository）
自分のpc上に作成されるリポジトリ。自分専用の貯蔵庫。
リモートリポジトリに保存されていた変更履歴をここに入れていく。
作業者はローカルリポジトリのファイルを編集し、リモートリポジトリにアップロードして変更履歴を保存していく。

## クローン（Clone）
リモートリポジトリを自分のローカル環境（自分のpc上）へコピーすること。

## コミット（Commit）
![勉強会_アートボード 1 のコピー 10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950313/296c6cca-1818-eeb9-15fe-34d818e001fe.png)
![勉強会_アートボード 1 のコピー 5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950313/c052a50b-1b7c-bdad-43d0-d12e4c71afbd.png)
ローカルリポジトリに対してファイルやディレクトリの変更を保存すること。
ゲームのセーブポイントのイメージ。
変更履歴は各コミット単位で保存されている。コミットだけだとリモートリポジトリには反映されない。

## プッシュ（Push）
![勉強会_アートボード 1 のコピー 8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950313/d95e8ee0-35bd-9fa2-8eca-217ebaf51789.png)
ローカルリポジトリのコミットをリモートリポジトリにアップロードすること。
クローンとは反対。

## ブランチ（Branch）
![勉強会_アートボード 1 のコピー 13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950313/f452e761-6717-2593-0697-9117f89463d8.png)
![勉強会_アートボード 1 のコピー 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950313/40b2920a-3a6e-7b14-4e07-7b3ef32b4d9d.png)
同じリポジトリ内で複数の変更を同時に進めるため、履歴を分けて記録していくもの。
またベースになる**masterブランチ**に誤った変更を加えてしまうのを防いだり、同じタイミングでの機能の追加、バグの修正を行うことができる。

## チェックアウト（Checkout）
今いるブランチから別のブランチに切り替えること。
移動先に何らかの変更がされている時や、自分のブランチにプッシュしていないコミットがある時は使用ができない。
コミットせずにチェックアウトしたい場合、スタッシュをすることでコミット内容を退避できる。

## スタッシュ（Stash）
![勉強会_アートボード 1 のコピー 11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950313/b8e8bd3f-3a90-ac8a-aaed-5ab3a42dd9f8.png)
![勉強会-13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950313/41fbeb9e-ec1f-2275-f2f0-5b6b333edcf7.png)
コミットしていない内容を一時的に退避させること。
作業中でない他ブランチに切り替える必要があった際に、作業が中途半端な時やまだコミットのタイミングでない時に使用する。

## マージ（Merge）　
![勉強会_アートボード 1 のコピー 12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950313/a11f5181-cba9-8a95-a279-eec367f489cc.png)
![勉強会_アートボード 1 のコピー 6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950313/233812b0-d3e5-f568-e089-8f94033492cf.png)
分岐したブランチを別のブランチに合体させること。
ベースになるmasterブランチではなく、別に作業ブランチで作業し、その作業をmasterブランチにマージしていくような流れが基本。

## フェッチ（Fetch）
![勉強会_アートボード 1 のコピー 7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950313/8a6a9d4b-d522-f740-3fc5-6e20e028e327.png)
リモートリポジトリの最新の履歴を取得のみできる。
ブランチにはフェッチの内容が反映されない。今のリモートリポジトリが最新状態かどうかを確認するために使用することが多い。

## プル（Pull）
![勉強会_アートボード 1 のコピー 9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950313/ea0cd683-e663-2914-a923-ba9cd2660d9a.png)
リモートリポジトリの最新履歴を取得し、ローカルリポジトリに最新の履歴を反映する。
ダウンロードのイメージ。フェッチと機能は似ているが**自分のローカルリポジトリにリモートの履歴を取り込めることが大きな違い。** 
<font color="red">**プル＝フェッチ＋マージ**</font>と言える。

## リベース（Rebase）
![勉強会_アートボード 1 のコピー 3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950313/ce70264b-b6bb-7938-e3bc-2eb45f6530e3.png)
作業ブランチをベースとなるブランチの最新から作り直すことができる。
作業中にマスターブランチが先に進んでいき、自分の作業ブランチが古いマスターブランチから分岐した状態の時に行うと、新しくマスターブランチの最新から分岐させることができる。

## チェリーピック（Cherry-pick）
![勉強会_アートボード 1 のコピー 4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950313/132cfe3b-f4c3-02be-9c09-7f7545a7a096.png)
任意のコミットを作業中のブランチに取り込むことができる。
別ブランチにあるコミット内容を今の作業ブランチで使いたい時に使用する。

# まとめ
専門的な用語が多くとっかかりにくいな…と最初に使った時に思ったのを覚えています。
やっぱり自分で操作してみないと覚えられないので、使える機会があったら進んでやっていきたいです！

### 参照、参考
[【Git】No Git, No Life!](https://zenn.dev/web_tips/articles/bba3a42a27378e#no-git%2C-no-life)
[【Git】入門記事リンク集【Sourcetree/GitLab/git-flow】](https://qiita.com/k-kishimoto/items/7ca2e5f4c7e41f77bd7f)
[【初心者向け】Gitの各用語をわかりやすく説明します](https://webstyle.work/gitword/)
[【イラストで覚える】初心者のためのGitとGitHub用語集](https://zukulog098r.com/git/)
[Gitを使いこなしたい！〜仕組みとコマンド24選〜](https://qiita.com/satona-oinuma/items/97205ca0ce04dcae2adb)
[サル先生のGit入門](https://backlog.com/ja/git-tutorial/intro/02/)