【GitHub Desktop】コマンド付きよく使う機能簡単まとめ

# はじめに
git 操作はコマンドでやっている人も多いと思うが、GitHub Desktop という GUI が使いやすいので、個人的によく使うものを簡単にコマンドとセットで書いてみる。

インストール方法などは公式ページや他にも記事があるのでここでは書かない。

https://docs.github.com/ja/desktop/installing-and-authenticating-to-github-desktop/installing-github-desktop

# Repository の変更と確認
GUI 左上から確認できる。また、ここをクリックしメニューを出すことで登録済みの Repository 一覧を見ることができ、変更することができる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/0470a737-93b6-a0db-cf2f-5c36db73bdfc.png)

### コマンドで言うところの `cd` に該当する
```bash
cd githubactions-test
```

# Fetch して Pull する
右上の `Fetch origin` を押すと、リモートの状態を取得し差分があるかを確認できる。
もし、差分があれば `Pull origin` という文字が出るので、それを押すことで更新することができる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/cc713b4b-0d5b-c407-6ea4-94dd3ab00a3c.png)

### コマンドで言う `fetch`, `pull` に該当する
```bash
git fetch
```
```bash
git pull
```


# Commit する
Repository 内で変更があるファイルは、`Changes` タブに表示され、変更ファイルをクリックすることで右側に変更前後の詳細が表示される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/ae736005-2a96-680f-d675-91b10e195de0.png)

### コマンドで言うところの `diff`, `add`, `commit` に該当する
GitHub Desktop で git を操作するときに、明示的に `add` コマンドに該当する操作はない。
GitHub Desktop では、`commit to {branch}` ボタンを押すと、`add` と `commit` を同時に行っている (と思っている)
```diff
$ git diff
diff --git a/README.md b/README.md
index xxxxxxx..yyyyyyy 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,3 @@
 # README

-
+test
```
```
git add README.md
```
```
$ git commit -m "commit message"
[master zzzzzzz] commit message
 1 file changed, 1 insertion(+), 1 deletion(-)
```

# Push する
Commit をすると、右上のボタンが `Push origin` という文字に変わる。
ここをクリックすることで push することができる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/28d3d5f3-3659-f19f-5044-ef10772393fe.png)

### コマンドで言うと `push` に該当する
```bash
git push origin master
```

# Branch を切り替える
branch 切り替えや、新しい branch を作成する際は `Current branch` と記載のあるタブで操作する

branch を切り替える際は `Other branches` の中から選択することで切り替えることができる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/8275d04c-dbc9-7b60-f0e0-ecd2e095bb7c.png)

また、新規作成する場合は `New branch` を選択し、以下の画面で `Name` を入力し、`Create branch` することで新規 branch を作ることができる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/f69eed73-dc46-24ef-7f35-b0fe2a1ce961.png)

切り替え/作成する際、変更ファイルが残っていると、そのブランチに置いていくか、移動先に持っていくかを選択できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/fa93e244-b3b8-dcb3-029f-9a4726a0f7eb.png)


### コマンドで言うと `checkout` に該当する
`feature/hoge` に切り替える
```bash
$ git checkout feature/hoge
Switched to a new branch 'feature/hoge'
M       README.md
branch 'feature/hoge' set up to track 'origin/feature/hoge'.
```

`feature/test` を作成し切り替える
```bash
$ git checkout -b feature/test
Switched to a new branch 'feature/test'
```

# Merge する
現在いる branch に他の branch の変更を取り入れる、`merge` を行う。

merge を行うには、`Current branch` タブの中の一番下、`Chose a branch to merge into master` を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/31ddeb0b-49b9-28a8-5372-b10013d85677.png)

するとこのような画面になるので、Merge したい branch を選択し、`Create a merge commit` を押すことで merge することができる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/95409136-5009-e4ea-233d-02b1cf29678a.png)


### コマンドで言うと `merge` に該当する
```bash
$ git merge feature/test
Merge made by the 'ort' strategy.
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
```

# 変更の Stash や Discard をする
簡単に言えば変更の一時破棄 (Stash) と完全破棄 (Discard)。

Stash が存在すると Changes の下に `Stashed Changes` という枠が出てくる。これを選択すると右側に stash された変更が表示され、Restore (復元) するか、Discard (破棄) するかを選択できる。
Stash が残っているとその分ディスク容量を食うっぽいので、なるべくなくしておくといいかも？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/dd33693c-b574-5813-7091-a220823dfb9f.png)

現在の変更を手動で Stash する場合は、変更ファイル数が書いてあるところを右クリックして選ぶ。
Discard の場合は前述の手順ですべてを破棄か、ファイルごとに右クリックすることでファイル指定の破棄ができる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/dd17dfd4-31f1-25e4-fe38-8b575627a985.png)

### コマンドで言うと `stash`, `checkout .` に該当する
stash する
```bash
$ git stash -u
Saved working directory and index state WIP on master: xxxxxxx commit
```

stash のリストを確認する
```bash
$ git stash list
stash@{0}: WIP on master: xxxxxxx commit
```
stash を戻す
```bash
$ git stash apply stash@{0}
On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")
```

変更を取り消す
```bash
$ git checkout .
Updated 1 path from the index
```


# 参考
https://docs.github.com/ja/desktop/installing-and-authenticating-to-github-desktop/installing-github-desktop

https://qiita.com/yasu_qita/items/3a24322f0ebdd443ba7e

https://qiita.com/chihiro/items/f373873d5c2dfbd03250