gitのまとめ(後半)

これからgitのコマンドや使い方についてまとめていきます。
また、トラブルをどのように解決していったのかをまとめていきたいと思います。
私は初めてgitに触れる中で様々なことを学びました。
この記事を書こうと思った理由は大きく分けて2つあります。
1つ目は、gitのコマンドを実行した際にイメージとは大きくかけ離れた動きをしたからです。
2つ目は、gitのトラブルを解決するにつれて対処方法が分かってきたので今のうちにきちんと振り返ってまとめておきたいと思ったからです。
今回はコマンドのイメージと実際の動きを一致させて、gitを使って困った時に見返せるようにまとめていきたいと思います。
内容が多いので前後編分けて書いていきたいと思います。
今回は後半部分のトラブルを解決した話を書いていこうと思います。
<h2>第1話.403エラーはなぜ起こってるの？！</h2>
私は　gitの操作に慣れるために一通りの流れを動画を模倣してやってみました。その後演習問題があったので取り組むとなんとローカルレポジトリとリモートレポジトリの接続の際エラーが発生しました。まずはネット記事を参照することから始めました。するとHTTPS接続ではなくSSH接続をすると繋がるよという記事を発見したので試してみるとなんとコマンドが反応しませんでした。後から思い出してみるとSSH接続するときはキーを２種類作り接続しなければならないのでそれが原因だったんだと思います。ここで諦めるわけにはいかないと次の方法を探しました。すると、git config --show-origin --get credential.helperを使ってosxkeychainが出てきたらそれを削除したら接続できるよといった内容でした。早速tryしてosxkeychainが出てきたので削除しようと思ったけど削除の方法を調べているときにデフォルトの設定であることが分かりました。ここで疑問が浮かびました。「どうして1回目はデフォルトの設定を消してないのに上手くいって、2回目で上手くいかなくなったんだろう」という疑問でした。実は1度ローカルとリモートレポジトリの接続は上手くいってました。2回目でできなくて困っていたのです。なので、他の方法を探すこと3時間なかなか接続できませんでした。すると、403エラーの原因を一緒に考えてくれる人が現れました。何パターンか試した後やっと接続することができました。PCのユーザ名とパスワードを変えたら接続することができました。その方法は、まずcommand+スペースを押して「key」と入力するとキーチェーンアクセスがでます。クリックするとキーチェーンアクセスのページに飛ぶので右上の検索に「git」と入力します。するとgitのユーザ名とパスワードを設定するページが出てくるのでダブルクリックしてその中のユーザ名(GitHabのユーザ名)とパスワード（作成済みのtokenのパスワード）を入力します。するとエラーが解消して元通りに戻すことができました。
<h2>第2話.commitができなくなってしまった・・・</h2>
私は動画を見ながらgitのコマンドを打つのが精一杯な日々を送っていました。gitを操作していた時に間違えてVSCodeの閉じてしまいました。それからVSCodeで開き直して、いつものようにgit add . して　git commitを打つとエラーが発生しました。どうやらVSCodeでコミットメッセージを追加するページが開けないようでした。一度色々設定を加えたり、再度wrapを開きなおしたりしましたが一向に治りません。このままじゃgitの開発作業が全く進められないと焦りを感じていました。すると、ふとcommitの後にメッセージ入れるオプションなかったっけな、見た気がするなという何となく覚えていた情報から一か八か検索してみました。すると、エディターを立ち上げずcommitができる　git commit -m "message"コマンドに辿り着くことができました。さらに、VSCodeにcodeコマンドを再インストールしたらコミットメッセージの画面が立ち上がるようになり、git commitコマンドも使えるようになりました。手探りではあったけど最終的に解決できました！
<h2>第３話.git reset HEAD^の代わりのコマンドを使ったら絶望した</h2>
私が講座を進めていてcommitを分割していた時の話です。commitしていざ分割しようとしたら何回打ってもgit reset HEAD^がエラーになって反応しません。私は代わりのコマンドを探すためまた、ネットで記事を探し始めました。すると、update-ref -d HEADが代わりに使えるよということだったので実行してみると今まで作ったファイルがステージに戻ってきてしまいました。その状態でgit commitして　git logを確認するとupdate-ref -d HEADする前の全てのコミットメッセージが全て消えていました。焦ってネット記事を見ているとclearやcheckoutコマンドがあったので実行しましたが戻りませんでした。どうすることもできずに他の方法を探しているとgit reflogとgit resetが出てきました。最初にgit reflogを実行すると今まで履歴を見ることができました。そして、git reset でupdate-ref -d HEADを実行する前に戻ると全てのログが元通りになりました。あの時のログが戻った時の安心感は一生忘れないと思います。それと同時にネットで見つけたコマンドはきちんと調べて意味を理解した後に打とうと思いました。
また、このトラブルが始まる最初のきっかけとなったgit reset HEAD^が実行できなかった原因それは^にありました。最初私は、コマンドをgit reset HEADˆで入力してました。実際はgit reset HEAD^です。私は最初^を入力するときにoption+iで入力してました。実際の入力方法は英字入力モードにしてへのキーを押すのが正しいです。見た目は似ていても違う文字はたくさんあるのでこれから気をつけていきたいと思います！
<h2>第4話.pull Requestが作成できない</h2>
私がcommit、pushしてpull Reqestを作成しようとGitHab上で画面を開くとpullリクエストができませんでした。New pull requestボタンを押しても作成ができず、GitHab上でbranchを作成しても作ることができず、最終的には同じ画面をループしてずっと状況が変わりませんでした。調べてみるとwrap上でpull Request用のbranchを作成してpushすればよいと書いてあったのでしてみようと思いましたが、エラーが出てpushできませんでした。そこで、私は状況を整理しました。これはブランチを切って作業した後にmainブランチにmergeして送信したからpull Requestが作れなくなっているのではないかと仮説を立てました。今GitHabのフォルダーは訂正する場所もなく完璧な状態だったので一度ファイルを消してから、再度作業ブランチからpushすればpull requestが作れるのではないかと思いtryしてみました。すると、無事にpull reqestが送れる状態になりました。この経験から何のためにpull requestをしているのか考えることが大事だと学びました。普段はステージに上げるために、git add . して記録するために、git commitするというようにコマンドを実行していました。コマンドを実行したらどうなるのか考えてgitを操作しているからトラブルが起きにくくスムーズに作業が進んでいるんだなと改めて実感しました。これからは何のためにこのコマンドや操作は必要なのかしっかり理解しながら進めていきたいと思いました。

<h2>最後に</h2>
全4話のトラブルを解決していく話でした。
この経験からエラーには必ず原因があって自分一人でも情報収集すると直せることが分かりました。
そして、try and error　ってすごく大事で、諦めてしまいそうな時でも何回も何回も繰り返していけばいつか必ず成功するんだと実感しました。
私は、エラーが起きてしまうと焦ってしまうので冷静に対処できるようにしていきます。冷静な対処できることが頼れるengineerになる始めの一歩だと思うので日々の課題頑張っていきたいです！