リモートには無いはずのマージコミットが、本番サーバー側のブランチに存在
- あなたは 本番サーバーにSSHで入って、
git fetch
やgit checkout
やgit 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 | ローカルブランチとして作成 | ✅ |