リモートには無いはずのマージコミットが、本番サーバー側のブランチに存在

  • あなたは 本番サーバーにSSHで入って、git fetchgit checkoutgit pull origin ... しかしていない。
  • ファイルの修正や add/commit/merge はしていない
  • でも git log を見ると、リモートには無いはずのマージコミットが、本番サーバー側のブランチに存在していた。
  • つまり、本番サーバー上だけでマージが発生しているように見える。

git pull コマンドが暗黙的に「マージ」してしまったのが原因だと思われます!

git fetch origin
git pull origin 本番ブランチ

本願のローカルの 本番ブランチ の状態が、リモートとずれていた場合
pull 時に 自動でマージコミットが作られます。 これがあなたのケースっぽいです!

ローカルブランチの履歴 ≠ リモートブランチの履歴
→ その差を pull 時に Git が「merge」で埋めようとした
→ 結果としてこのマージコミットが生まれた

git reflog や git log –graph

今後の対策

  • 本番サーバーでは git pull を使用しない!
  • 安全な更新方法
git fetch origin
git reset --hard origin/master

git reset –hard origin/master って毎回使っていいの?リスクは?

  • 本番サーバーでは基本 ローカルで開発しない
  • コミットも、ファイル変更も、add も、merge もしない

という条件であれば

git fetch --prune origin
  • 全体の情報は更新される
  • 削除されたブランチのゴミ情報は整理される
  • ローカルには必要なブランチしか作られない
操作持ってくる内容ローカルブランチになる?
git fetch origin全てのブランチのHEAD情報(参照だけ)❌ ならない
git checkout origin/fooリモートを直接参照するだけ
git checkout -b foo origin/fooローカルブランチとして作成