手動でgithub上のREADMEなどを修正した後、ローカルでgit pull せずに開発進めてしまった時の対策についてメモ
事象
- GitHubで直接編集: GitHubのサイト上で
README.md
を気軽に更新。 - ローカルで開発: その後、PC側で
git pull
を忘れて、そのまま今日の開発を進めてコミット。 - いざ
push
!:git push origin main
を実行 → エラー発生!
なぜエラーになったの?
原因は、Gitの歴史が「分岐」してしまったからです。
- GitHub側の歴史:
README.md
を編集した新しい歴史 - PC側の歴史: 今日の開発をした新しい歴史
PCとGitHubで、共通の過去から別々の未来が伸びてしまった状態です。このままでは、どちらの歴史が正しいのかGitが判断できず、push
もpull
も「どうすればいいか指示して!」とエラーを出してきます。
解決策はこれだけ!
この「歴史の分岐」を解決するコマンドがこちら。
ステップ1:リモートの変更を「マージ戦略」で取り込む
git pull origin main --no-rebase
このコマンドは、「GitHubの変更を取り込んで、PCの変更と合体させてね。その際、両方の歴史を正直に残す"マージ"という方法でお願い!」という明確な指示です。
実行すると、マージコミットのためのエディタ画面が開くことがありますが、何もせず保存して閉じればOKです。
ステップ2:改めてpush
する
これで、あなたのPCはGitHubの歴史とあなたの開発の両方を含んだ、最新状態になりました。あとは、もう一度push
するだけです。
git push origin main
今度はスムーズに成功するはずです!
まとめと教訓
GitHubで直接ファイルを編集するのは手軽ですが、その後のpull
を忘れがち。もしpush
でエラーが出たら、焦らずに以下の手順を思い出してください。
git pull origin main --no-rebase
で歴史を一つにまとめる。git push origin main
でGitHubに反映させる。
この2ステップで、大抵の「やっちゃった」は解決できます。