🌐
リモートリポジトリで直接編集してしまった後の対処方法
Gitを使っていると、リモートリポジトリとローカルリポジトリの状態がずれることがある。例えば、ローカルではなくGitHub上で直接編集した場合、リモートの変更をローカルに反映しないと作業が破綻する。リモートの最新状態をローカルに取り込む方法を整理した。基本的な手順から、競合が発生した場合の対処、強制的にリモートの状態に合わせる方法までまとめてみた。
1. ローカルリポジトリの変更を確認
まず、ローカルリポジトリに未コミットの変更がないか確認する。
git status
もし未コミットの変更があれば、コミットするか、変更を一時退避する(stashを使用)こと。
git stash
2. リモートリポジトリの最新状態を取得
以下のコマンドでリモートの変更を取得する。
git pull origin main
もしくは、ブランチが master の場合:
git pull origin master
もしリモートリポジトリの変更がローカルと競合する場合、マージコンフリクトが発生することがある。この場合、適宜手動で修正する。
3. stashした変更を適用(必要な場合)
stash していた変更がある場合、以下のコマンドで元に戻す。
git stash pop
その他の状況
既にローカルで変更していて、リモートの変更を上書きしたい場合
強制的にリモートの変更をローカルに適用するには、以下のコマンドを使用する。
git fetch --all
git reset --hard origin/main
main の部分を適宜 master に変更する。
⚠️ この方法はローカルの未コミットの変更がすべて破棄されるため注意。
結論
基本的には git pull origin main を実行するだけでリモートの変更がローカルに反映される。競合が発生した場合は手動で解決する。もし強制的にリモートの状態を反映したい場合は git reset --hard origin/main を使用するが、事前にバックアップを取ることを推奨する。
Discussion