【基礎編】SourcetreeとIntelliJ IDEAとVisual Studio CodeでGit操作する


# 経緯
ペアプロやモブプロをしていると人のGit操作を見ることがあり、人によって使っているGitクライアントって様々だな～と興味がわいたので、
せっかくだから現在のプロジェクトで使用している開発環境でのGit操作を調べてみました。

# やること
基本的なGitコマンドを、CLIと各GUIとで比較していきます。
それぞれ使用するツールは下記の通りです。
CLI（GitBash）、GUI（Sourcetree、IntelliJ IDEA、Visual Studio Code）

初心者の方でもわかりやすよう画像を多めに用意しました！ぜひ最後までよろしくお願いします！

なお、各ツールのインストールなどは省いております。ご了承ください。

今回紹介するGit操作
- ローカルリポジトリを作成して、リモートリポジトリにプッシュする 
- masterからブランチを作成して、チェックアウトする
- masterへマージする

## ローカルリポジトリを作成して、リモートリポジトリにプッシュする
### CLI（GitBash）
```
$ mkdir TECHBLOG_CLI
$ cd TECHBLOG_CLI/
$ git init
```
自分のGitHubアカウントから空のリポジトリを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/4da0b4ec-4584-2fb7-8e64-dc72e45f034b.png)
```
// 適当にプッシュするファイルを作成
$ vi firstText.txt
// Git操作
$ git add .
$ git commit -m "first commit"
$ git remote add origin https://ユーザーID:アクセストークン@github.com/ユーザーID/TECHBLOG_CLI.git
$ git push origin master
($ git push origin main)
```
GitHub上に反映されました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/8146d031-d85a-c765-7c49-a959a1f12391.png)

::: note 
失敗したはなし
最初こういう風に設定していた
$ git remote add origin https://github.com/ユーザーID/TECHBLOG_CLI.git
後々、pushしようとすると
```
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
```
といったエラーが出て、プッシュできなかった。
以前作ったssh鍵が原因ぽいとこまで、調べて解決策をやってみたがうまくいかなかった・・・。
やっぱり個人アクセストークンよね！って下記を実行してリモートリポジトリを設定しなおしたらpushできるようになった
`$ git remote set-url origin https://ユーザーID:アクセストークン@github.com/ユーザーID/TECHBLOG_CLI.git`
:::


以下、同じ作業を各GUI上で行います

### Sourcetree
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/257b47b6-237f-334b-0b3c-33150ae98ff6.png)

保存先のパス：[参照]から保存したいディレクトリを選択

::: note
作成場所に気を付けて
`C:\hogehoge`　の状態で作成すると、hogehogeの直下にローカルリポジトリが作成されます。
[参照]をクリックした際に表示されるエクスプローラ上で、新規ファイルを作成するか、hogehogeの後に`¥fugafuga`と入力すると、fugafugaフォルダがhogehogeの下に作成されます。
⇒C:\hogehoge\fugafugaがローカルリポジトリとして作成されます。
:::

名前:ローカルリポジトリの名前です。※わかりやすい名前で大丈夫です。たいていはプロジェクト名ですかね

ここまでが
```
$ mkdir TECHBLOG_CLI
$ cd TECHBLOG_CLI/
$ git init
```
と同じ作業です。

適当なメモ帳を開き、作成したローカルリポジトリ内に保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/f6695c44-c33c-bf89-b36c-4683de53ef6a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/1b77f870-757a-1bd8-61a3-7bb60a747bc8.png)
保存したテキストファイルが作業ツリー上に表示されています。
[全てインデックスに追加]または、対象を選択[選択をインデックスに追加]をクリックするか、
対象を選択してindexにステージしたファイルのエリアにドラック＆ドロップします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/77c7caf7-b566-d49c-a3da-63bb8bf23220.png)

コメント編集エリアでコメントを入力し、[コミット]をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/dcf75135-fe52-0d5a-cefa-e2e0070501f5.png)


右上の[リモート]をクリック
設定がまだの場合、エラーメッセージが表示されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/955a8ad7-c73f-fb09-502d-4ac6a1b722e5.png)

設定⇒リポジトリ設定：[追加]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/74ac615d-e69b-6481-ed67-4312edfc7123.png)

リモートの詳細設定に必要な情報を入力します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/d3c828e1-b85c-a396-ba4b-cd60e69e8cb8.png)

リモート名：リモートリポジトリの名称
URL/パス：GitHub上でコピーしたURL

:::note
リモート名
リモートリポジトリのアクセス先に対してGitがデフォルトでつける名前
[origin]としておけば間違いない
※あとで修正もできます
:::

CLIと同じように`https://github.com/ユーザーID/xxx.git`
そのまま入力してプッシュしようとするとエラーとなります。
```
Unable to open connection:
Host does not existfatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
```
:::note info
パスワード認証は廃止されたので注意が必要です。
×： `https://ユーザーID:パスワード@github.com/ユーザーID/xxx.git`
:::
```
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
```
:::note 
個人用アクセストークンを利用した認証かSSHでの認証をGitHubは推奨しているとのこと。
今回は比較的簡単な個人用アクセストークンの方法で認証しています。

アクセストークン作成ドキュメント
https://docs.github.com/ja/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token

〇：`https://ユーザーID:アクセストークン@github.com/xxx.git`
:::

個人用アクセストークンの設定ができたら、sourcetree上から[プッシュ]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/9909d70a-36a7-4fae-a6b9-1eb6607edd73.png)
対象にチェックが入っていることと、リモートブランチを確認して、[プッシュ]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/92f2531d-ee0f-da5a-a3f4-a9a980460b93.png)
ここまでが
```
$ git remote add origin https://github.com/ユーザーID/TECHBLOG_CLI.git
$ git push origin master
($ git push origin main)
```
と同じ作業です。
設定が正しければ、GitHub上に反映されています。

### IntelliJ IDEA

IntelliJ IDEA上でprojectを新規に作成します

VCS>Gitリポジトリの作成を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/e5746978-22f9-64b9-7edc-167230f9e3b9.png)

VCSだったところがGitに代わり
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/1c238036-3b03-7e4f-d714-b4ccf23b175b.png)
下にGitのタブができています
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/8ff0ad78-611b-9106-b8dd-04c15f2edb2c.png)
ここまでが
```
$ mkdir TECHBLOG_CLI
$ cd TECHBLOG_CLI/
$ git init
```
と同じ作業です。

コミット画面へ移動
|画面左のコミットを選択|画面右上のチェックマーク（コミット）を選択|
|---|---|
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/80a9aa29-9d13-66bc-bad6-7665ea3b49f6.png)|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/98fe9c65-3158-2461-60cf-9205c67c36d4.png)

どのファイルをコミットするか選択できるようになります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/602b75bb-9f6f-d196-ca93-37dceb7c9d09.png)

コミットしたいファイルを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/0a771bef-4cfa-26c7-cc70-a69c381b35c0.png)

コミットメッセージを入力し「コミット」をクリック
※「コミットとプッシュ」でもいいです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/a064521d-3575-7dac-d1b3-e3d03e387059.png)

プッシュマークをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/dc6ed6dd-ccd9-5098-e73c-699d99c79953.png)

※GitHub連携がまだな場合、なにも表示されません
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/4ff835a0-5981-c07e-43a9-7b610f47e62e.png)

::: note 
個人アクセストークン認証で認証します
〇：`https://ユーザーID:アクセストークン@github.com/xxx.git`
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/63df7dea-af85-df52-fb2a-e0735b487d61.png)

認証が成功するとプッシュが押せるようになります。
GitHub上に反映されているはずです。下のツールウィンドウにもブランチの状態が反映されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/7139b6e1-6bbd-10ca-bb60-339af6f57ec6.png)

ここまでが
```
$ git remote add origin https://github.com/ユーザーID/TECHBLOG_CLI.git
$ git push origin master
($ git push origin main)
```
と同じ作業です。

### Visual Studio Code

左のタブからこのアイコン(ソース管理)を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/c72e4511-6559-210e-1da8-fc617c433085.png)
フォルダーを開くを選択して、リポジトリを作りたい場所にフォルダを作成して選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/b01db7aa-cc35-ea61-3dea-3169594fe246.png)
リポジトリを初期化をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/b5965ff2-3d9d-1b6a-5d4b-71f57e21c3ae.png)
git管理のタブに代わります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/e409b252-c98a-a6a4-87f1-ae85b4e93dfe.png)
ここまでが
```
$ mkdir TECHBLOG_CLI
$ cd TECHBLOG_CLI/
$ git init
```
と同じ作業です。
新しいファイルを作成し、適当な文字列を入力して保存します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/95a467f7-8bc6-0601-7c9c-5a5fe2d78e78.png)

変更の下に保存したファイルが表示されているので、「+」変更をステージをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/9f0b4a97-1de4-05bc-dcd4-ae85cbe357fd.png)

クリックしたファイルがステージされている変更に移るかと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/be006c47-b268-0d42-7844-cded704d1e6c.png)

コミットメッセージを入力し、チェックマーク（コミット）をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/306e5a9d-3bac-45ce-2d6a-c5c2a24ffa48.png)

リモートリポジトリと連携させます。
「・・・」その他の操作をクリック＞リモート＞リモートの追加　をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/8fb0fd68-8f45-3623-e10e-2e555a310dfb.png)


ここのリポジトリを指定するときに
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/55580214-ab3d-3e7e-c4ad-933b82452f7d.png)

::: note 
個人アクセストークン認証で認証します
〇：`https://ユーザーID:アクセストークン@github.com/xxx.git`
:::

プッシュを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/5220d607-ff9f-bff5-c7d9-2decf81b0a10.png)

ここまでが
```
$ git remote add origin https://github.com/ユーザーID/TECHBLOG_CLI.git
$ git push origin master
($ git push origin main)
```
と同じ作業です。
設定が正しければ、GitHub上に反映されています。

## masterからブランチを作成して、チェックアウトする
### CLI（GitBash）
```
// どちらか
$ git switch -c <ブランチ名>
($ git checkout -b <ブランチ名>)
```
::: note
$ git switchは Git 2.23.0（2019年8月16日リリース）で追加されたコマンド
https://tracpath.com/docs/git-switch/
個人的には checkout より直感的で好き
:::

ブランチが切れました
チェックアウトできたかどうか確認
```
$ git branch
* 2ndBranch
  master
```
:::note
$ git branch
ブランチの一覧を表示するコマンド
ブランチ名の横に[*]がついているやつがチェックアウト中のブランチ
:::

ちなみに
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/b3191490-e2f6-9986-9064-49923ee8b874.png)
カレントディレクトリの横に、今いるブランチ名が（）内に表示されているのでわかりやすいですね。

### Sourcetree

ブランチをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/44497ea0-446f-7993-77c2-b4ac2f7781f3.png)
作成したいブランチ名を入力してブランチを作成をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/e538163c-e2ac-966b-b2f2-6bbedc6ef465.png)

はい！ブランチ切った
ブランチを切ってチェックアウトされているかは、GUIでは下記で確認できます。
|ローカルブランチ一覧のブランチ名の横に〇がつく|git操作履歴にブランチ名が表示される|
|---|---|
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/92e4b879-e72c-be0e-7268-03a16d60e6e8.png)|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/d2515e62-fc21-b4b3-9f1a-42a5332469d9.png)

### IntelliJ IDEA

|ローカルブランチ一覧から右クリックから|ブランチ一覧横の「+」から|右下のブランチ名をクリックから|
|---|---|---|
|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/99156375-a5fd-bbe8-8ed1-e152eb9e2bdf.png)|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/82dc8ca1-8af8-aaa9-fcbf-10ea93d0d3a9.png)|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/a305c82c-2f70-43ef-3e55-994564d08ab9.png)|

作成したいブランチ名を入力して作成をクリック。チェックアウトするにチェックが入っていることを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/3ca5238f-7cbc-fce5-0048-a56048b79758.png)

はい！ブランチ切った
ブランチを切ってチェックアウトされているかは、GUIでは下記で確認できます。
|ローカルブランチ一覧にしおりみたいなマークがつく|右下のブランチ名|
|---|---|
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/cba00842-c02f-84bd-9099-e1f484f31a03.png)|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/bbbfb32a-4d78-bebe-6c92-c95f2a6a6387.png)|

::: note
作成した際にメッセージも表示されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/9f0a5c79-d0a8-37d8-5916-809f272b4151.png)
:::


### Visual Studio Code

|「・・・」その他の操作をクリック＞ブランチ＞分岐の作成　をクリック|左下のmasterと書かれているところをクリックでもできます|
|---|---|
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/4f6df9b2-3330-f6de-58c1-6c943da9b653.png)|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/9e829120-06cd-0403-a890-722100ede7c4.png)

作成したいブランチ名を入力してエンター
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/d2a33fa7-9cdf-b280-5c06-932b21cda68b.png)

はい！ブランチ切った
ブランチを切ってチェックアウトされているかは、GUIでは下記で確認できます。
|ソース管理リポジトリのところ|左下のところ|
|---|---|
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/eac6f95e-843d-3eaa-9438-145194e1e359.png)|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/266dbf38-4a54-0912-11bf-af04a812fcf1.png)

## masterへマージする
:::note
2ndBranchの編集をmasterブランチへ取り込む
:::
### CLI（GitBash）
チェックアウトしたブランチ(2ndBranch)でファイルを編集します。
※同じ操作のため割愛します
```
$ git switch master
$ git merge 2ndBranch
```
::: note
CLIもGUIぽいことできるってはなし
$ git log --graph　をするとコミット履歴の横に樹形図が表示される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/a841a5c2-55cf-9273-3fae-5f0b440a09c4.png)
:::

### Sourcetree
チェックアウトしたブランチ(2ndBranch)でファイルを編集します。
※同じ操作のため割愛します


masterブランチにチェックアウト
※ブランチをダブルクリックでチェックアウトします
右クリック＞現在のブランチにbranchnameをマージ　をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/285113ae-308f-5f6d-67fb-2419bc6e239e.png)

確認メッセージがでますのでOKをクリック
すると2ndBranchで行った編集がmasterブランチに反映されています。

:::note
カラフルにしたくなるやつ
チェックアウトと編集（コミット）とマージを行うと樹形図がこのような感じになります。
青色がmasterブランチのコミットを示していて
赤色が2ndBranchのコミットとmasterブランチへのマージされたことを示しています

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/0f9b7dbc-34f3-fef0-a31f-caf9f1d1d952.png)
:::

### IntelliJ IDEA
チェックアウトしたブランチ(2ndBranch)でファイルを編集します。
※同じ操作のため割愛します

masterブランチにチェックアウト
※ローカルブランチ一覧からブランチを選択し右クリックまたは右下のブランチ名をクリックからチェックアウトを選択

|ローカルブランチ一覧から右クリックから|右下のブランチ名をクリックから|
|---|---|
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/085456c2-4fc7-b900-cf08-832642dee944.png)|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/d50b44c3-21e9-6534-9805-7aae86e21387.png)

すぐにマージされます
すると2ndBranchで行った編集がmasterブランチに反映されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/855a2d81-98d7-0af1-201d-f90ddb17530f.png)

### Visual Studio Code
チェックアウトしたブランチ(2ndBranch)でファイルを編集します。
※同じ操作のため割愛します

masterブランチにチェックアウト
※ブランチ名クリックからチェックアウトしたいブランチ名を選択
|ソース管理リポジトリのところ|左下のところ|
|---|---|
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/eac6f95e-843d-3eaa-9438-145194e1e359.png)|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/266dbf38-4a54-0912-11bf-af04a812fcf1.png)

「・・・」その他の操作＞ブランチ＞ブランチをマージを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/72779892-302f-9eb7-c183-e7b0bc3382b0.png)

マージ元のブランチを入力または、選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/728f19f2-bfa9-d342-f730-56a564631352.png)

:::note
マージ元/マージ先の理解
マージ元はマージで合流する側　マージ先はマージを受け入れる側　⇒マージ元はマージ先と合流したい
今回は2ndBranchをmasterへマージしたい ⇒マージ元：2ndBranch　マージ先：master　となります。
:::

:::note
Visual Studio Codeでの履歴一覧表示
標準機能で表示する方法を見つけきれませんでした・・・
拡張機能の2つを紹介　※追加の仕方は割愛
|git history|git graph|
|---|---|
|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/44592354-ea5d-df1b-6757-71f5b06e15cf.png)|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/142151b8-3372-f3ca-1fb3-d452ddb98e4b.png)|

赤で囲んだのがgit history、青で囲んだのがgit graphを表示させるボタン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/04b1e5b9-09ff-e7b2-f5da-55055b4b1603.png)
:::

# まとめ
自分はもっぱら、Git操作はSourcetreeを使っているのですが、ほかのもいいな～と思いました。

今回はここまでですが、まだまだ紹介したい"各開発環境でできること"があるので次回はそれらを紹介できたらと思います！

- SSH認証でのGit設定（再設定）
- その他のGitコマンド
などなど・・・（未定）

最後までご覧いただきありがとうございました！