【Gitトラブルシュート】git reset –hard origin/..の活用(git pullの事故、.gitignoreの変更が原因で、、)
更新日:2025/05/15
.gitignoreの変更が原因で、ローカルブランチ切り替え時に未追跡ファイルが出て混乱した件
リモートでは .gitignore に追加済なのに
git checkout masterと切り替えたら、こんな感じの git status 結果に
Untracked files:
newdir01/
newdir02/
newdir03/「え、これらって .gitignore に入ってるはずじゃなかったっけ?」
そう思って確認したけど、自分のマシンでなくサーバー上なので状態が掴みにくい…
原因はローカルブランチがリモートの更新に追いついていなかったため
.gitignore が更新されたのはリモートの master ブランチのみ。
でも、ローカルの master ブランチは古いままで追いついてなかった!
だから、.gitignore に newdir01/ 〜 がまだ含まれていない状態でブランチを切り替えた結果、
ワーキングツリー上にそれらの未追跡ディレクトリが出てきてしまった、というわけです。
上記についてはリモートの .gitignore 変更をログで確認し、わかりました!
git log --oneline --decorate master -- .gitignoregit reset –hard originでローカルブランチを最新に追いつかせる
まずはリモートとの差分を把握
git fetch origin master
git diff master origin/masterサーバー上のローカルブランチを最新のリモートブランチに合わせる
git checkout master
git reset --hard origin/masterリモートには無いはずのマージコミットが、本番サーバー側のブランチに存在
- あなたは 本番サーバーに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/mastergit reset –hard origin/master って毎回使っていいの?リスクは?
- 本番サーバーでは基本 ローカルで開発しない
- コミットも、ファイル変更も、add も、merge もしない
という条件であれば
git fetch --prune origin- 全体の情報は更新される
- 削除されたブランチのゴミ情報は整理される
- ローカルには必要なブランチしか作られない
| 操作 | 持ってくる内容 | ローカルブランチになる? |
|---|---|---|
git fetch origin | 全てのブランチのHEAD情報(参照だけ) | ❌ ならない |
git checkout origin/foo | リモートを直接参照するだけ | ❌ |
git checkout -b foo origin/foo | ローカルブランチとして作成 | ✅ |
-
検索
(例) debug search etc.. -
カテゴリー
-
mixhostでのWordPress利用について
更新日:2024/04/02
303 view
-
scrollHint
更新日:2024/03/13
251 view
-
XML Sitemap Generator for Google不具合のダウングレード対応、代替プラグイン
更新日:2024/06/13
243 view
-
【SnowMonkey】納品までのフローまとめ
更新日:2025/02/15
164 view
-
【Snow Monkey】ショートコードで編集画面で任意の場所にHTMLファイルを挿入
更新日:2025/04/18
131 view
-
【Googleサーチコンソール】検索画面で表示させたくない「Googleのインデックス削除」
更新日:2024/06/07
131 view
-
tailwindcss使い方
更新日:2024/03/13
125 view
-
キーワード検索で上位表示させる方法【SEO】
更新日:2023/10/28
120 view
-
Recline: GitHub Copilotで動作するClaude 3.5 Sonnet搭載の開発支援ツール
更新日:2025/01/20
115 view
-
WordPressプラグイン「All-in-One WP Migration」のトラブル
更新日:2022/03/31
84 view
-
ワードプレスセキュリティー対策まとめ【2025年】「site guard wordpress」「BackWPup バージョン5でUI変更!?」
更新日:2025/02/25
77 view
-
VSCodeで開発効率を劇的に向上させる!Roo Code(Roo-Cline)プラグイン完全ガイド
更新日:2025/04/06
75 view
-
Express、FastAPIを使用し、二重fetch構成のメリット
更新日:2025/04/26
51 view
-
SSHを使用してGitHubのリポジトリをクローン、複数の接続元で公開鍵をディレクトリで区別する方法
更新日:2025/01/13
49 view
-
「JSONスキーマ」と「Few-shot Learning」で実現する次世代生成AIソフトウェア開発の可能性
更新日:2025/07/06
44 view
-
Supabase 初心者向け解説、Supabase CLI インストール(Scoop)
更新日:2025/06/07
44 view
-
リファクタリング【VSCode Javasctipt Python】
更新日:2025/03/09
37 view
-
Windowsショートカットエラーの原因と解決方法「このショートカットは、リンク先のファイルが変更または移動されているので、正しく機能しません」
更新日:2025/02/09
37 view
-
Next.jsでAWS Amplifyを使ってPDFアップロード機能を実装、Fast APIにPOST(こちらはApp runner)
更新日:2025/06/06
37 view
-
形態素解析とは?初心者でもわかるツールの使い方と実践例
更新日:2025/02/08
34 view