背景
こんにちは。エンジニアのたまご、風見優人です。
Githubってエラーが起きたりして厄介な存在じゃないかと
プログラミング初心者は思っているのではないでしょうか?
私もそんな悩みを抱えているプログラマー卵初心者ですw
こんなエラーが起きたので、
どうやって解消するかを解説していけたらと思います。
コミットの履歴が違うがために起きたエラー
まず初めに...リモートにプッシュしようとすると
リモートとローカル上のコミットの歴史(history)が違うがために
エラーが発生してしまいました。
原因
私としたことが、通常であればリモートレポジトリーを
github上で作成をしたらローカル上から初めてのpushを
リモートにすると思うのですが...
私は先にgithub上でreadmeファイルをコミットしてから
そのあとにローカルからrails newで作成したファイル一式を
リモートにpushを試みたのです。
(おいおい、そりゃローカルとリモートのコミットの歴史が
違うのでpushできずにエラーになってまうわいww)
解決方法
REBASEを使用せよ!
そんで、それってどうやって直すの?
って話になると思うのですが
Gitのコマンドには便利な機能があって
REBASE機能をつかうことでリモートのコミットの歴史と
同じ状態にローカルもすることができるんですね~。
コマンド実行順番
① git pull --rebase origin main
⇒ mainの部分はリモートにある履歴を一致させたい
ブランチ名に合わせましょう。
(人によってはmainではなくてmasterとかの人もいるかもしれません)
上記コマンドをすることで
リモートの履歴をローカルの履歴を合わせられます。
② git status
⇒ git statusでどのファイルがローカルの
ステージングに上がっているのか上がっていないのか
チェックをします。
こんな感じにステージングされていない
ファイルは赤く表示されますよ♪
③ ファイルを修正
今回は赤くなってしまったファイルが
もともとあったローカルのファイルと
コンフリクトを起こしてしまったので
コンフリクトが起きたファイルを開いて修正します。
④ git diff ファイル名
これをすることで修正したファイルの
差分を確認することができます。
⑤ git add ファイル名
今回の場合はファイル名はコンフリクトが起きた
README.mdファイルになります。
git add をしてステージングに乗せてください。
⑥ git rebase --continue
これをすると、rebaseの状態から抜け出すことができます。
⑦ ESC :q で変な画面から脱出
変な画面が出るので
ESCを押して、一番下の行に:qをいれて
enterでぬけだしてください。
⑧ git push origin -f ブランチ名
最後にリモートにプッシュするのですが
pushする際に通常のプッシュでは
rebaseした時点で過去の履歴を強制的に合わせたと
ローカルが判断しpushできない状態になのです..
なので強制的にpushします!
-fは強制プッシュのやり方です。
これにて、リモートのコミット歴とローカルのコミット歴が
一致したことになりました。
まとめ
・リモートのコミット歴に合わせる際はrebaseを使用せよ
・rebaseをするとローカルからリモートにプッシュできなくなるので
強制プッシュをせよ
参考になりましたら、
いいねとチャンネル登録を宜しくお願いいたします!
(youtuberか?!wwww)
LGTMを押していただけるとモチベーションUPに繋がります^^