GitHubに誤ってpushしてしまったものを取り消す方法（reset）

#reset（対象のコミットをコミットログから削除）の使う場合
- チーム開発の場合には無かったことにするため極力使わない
- 使用する場合は自分ひとりで触っている状態など
- passなどを上げてしまった時

##リモートリポジトリから完全に消し去る手順
####1. ログを確認しログIDを取得
####2. 適したreset方法(3種あり)を実行
####3. push

##３種の取り消し方法


```
$ git reset --soft コミットID      commitを取り消し
$ git reset --hard コミットID      commitとaddとソースを取り消し
$ git reset --mixed コミットID     commitとaddを取り消し
```
- `git reset --mixed`を実行した場合
  - コミットIDを指定し、リモートリポジトリ上のコミット・addを取り消し、push前の任意の状態まで戻す（ローカルリポジトリ上のソースコードは残る）

- VSコード上の`reset`したいbrunchのログの確認

- ターミナル上で`git log --oneline`を実行（各logの詳細を確認したい場合は、 `$ git log`を実行） 

```
$ git log --oneline
```

- 実行結果(下から上にいくほど新しいlog情報)

```
x86_64 itonoMacBook-Air$ "[~/training_project/training_project  test *]$ git log --oneline
574c160 (HEAD -> test, origin/test) test_5です。
92de579 test_4です。
16015ec test_3です。
a684537 test_2です。
7416e6d test_1です。
b88bfac test test test
```

```
コミットID    コミット内容
　　　　　　↓　　　　　　　　　　　　　　　　　　　　　↓
16015ec 　　　　　test_3です。
```

- 実際の画面 (log情報から抜ける時はターミナル上で`wq`と入力)
![スクリーンショット 2021-09-05 3.17.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1816103/4b9defb8-fedc-4f11-859d-9d75976563a7.png)


- 下記の部分が最新のlog情報
![スクリーンショット 2021-09-05 4.29.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1816103/4ecc592f-6b56-a0ce-0d96-b0570a92daff.png)


####戻したい任意のコミットIDを指定
- 赤枠の`16015ec test_3です。`まで戻したい場合
![スクリーンショット 2021-09-05 3.55.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1816103/f84205ab-1e30-3fa4-a5b5-ed3e0094b03f.png)

- コミットID `16015ec`を指定し`git reset --mixed 16015ec` を実行


```
$ git reset --mixed 16015ec
Unstaged changes after reset:
M       test.txt
```
- 実際の画面
![スクリーンショット 2021-09-05 4.21.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1816103/d7ad5644-1e57-e29f-a2a2-14db7e51aab2.png)

- logを確認

```
$ git log --oneline
```

```
x86_64 itonoMacBook-Air$ "[~/training_project/training_project  test *]$ git log --oneline
16015ec (HEAD -> test, origin/test) test_3です。
a684537 test_2です。
7416e6d test_1です。
b88bfac test test test
```
実際の画面（ちゃんと最新のコミットが`16015ec test_3です。`まで戻っている）
![スクリーンショット 2021-09-05 4.14.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1816103/23e6f112-67f5-8611-8c7d-14f6cf7f2bb4.png)


##ローカルブランチを戻したところで`push`
- `git push -f origin ブランチ名`を実行

```
"x86_64 itonoMacBook-Air$ "[~/training_project/training_project  test *%]$ git push -f origin test
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/ITO9875/training_project.git
 + 437284f...16015ec test -> test (forced update)
```
※注：`git reset`後に修正した内容を普段通り`git push origin ブランチ名`のようにpushすると、以前のコミットとコンフリクト（作業が重複）してエラー(画像a参照)となり、pushできない
 (`git push origin ブランチ名`　を　`git push -f origin ブランチ名`とし、'-f'を記述することによって強制的にpushしている)


画像a：`git push origin ブランチ名`実行時の実際のエラー画面
![スクリーンショット 2021-09-05 4.07.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1816103/8e86bce5-92a2-cab2-a95b-2a0fb395ae50.png)


##GitHub・VSコード　reset前後
- GitHub

reset実行前
![スクリーンショット 2021-09-05 4.18.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1816103/13e01507-f1f0-dc8d-c138-3ee63a299ab4.png)
reset実行後
![スクリーンショット 2021-09-05 6.17.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1816103/ad278d7d-5a0d-d26e-392e-1607b1c70f05.png)



- VSコード

reset前
![スクリーンショット 2021-09-05 6.11.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1816103/d7086d36-45fc-420a-2e28-1e99da32dafa.png)

reset後
![スクリーンショット 2021-09-05 4.14.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1816103/e54e571f-8fc8-0fe0-fc5d-730bb09c98e8.png)



#reset --mixed ログID を実行した結果
・GitHub上のcommitとadd削除
・ローカルリポジトリ上ではソースコードは消えない

##その他のコミット削除方法
####revert（対象のコミットを打ち消すためのコミットを行う方法）
- 履歴を残しつつ取り消す

などがある（今後調べる）