はじめに
ちょこちょここういう事態が発生するので、自分用にまとめることにしました。
git push
には-f,--force
オプションがありますが、git pull
にはありません。
しかしやりたいイメージはそういうことです。
結論だけ書くと
対象をmasterブランチとします。 ローカルの修正は消えますので、要注意です。
# masterブランチにチェックアウト git checkout master # リモートの最新の状態を取り込む git fetch origin master # リセットする git reset --hard origin/master
もし既にmasterブランチにいて、git pull
やgit merge
によりコンフリクトを起こしてたら…
# merge処理の取り消しを行う git merge --abort # リモートの最新の状態を取り込む git fetch origin master # リセットする git reset --hard origin/master
実際にあったケースとしては、「masterブランチでgit pull
したときに、なぜかコンフリクトしたぞ?」というときでした。
本人が望まぬcommitをしていたようで。
少し解説
細かいところまで書き出すと長くなるので、軽いところまで…
詳細はぜひ--help
やドキュメントをご参照ください。
git fetch
git fetch
はリモートの最新の情報をローカルに落とすところまで。
merge
はしません。
git pull
をするとgit fetch
に加えてgit merge
まで行うので、今回の例でいうとmasterブランチに何か修正がcommitされていると、コンフリクトする場合があります。
git reset --hard
上にも書きましたが、ローカルの修正が削除されてしまうので、バックアップを忘れずに!
内容はドキュメントにあるとおりですね。
インデックスと作業ツリーをリセットします。
以降の作業ツリー内の追跡されたファイルへの変更はすべて破棄されます。
最後に
自分のブログにGitの記事がなかったことに驚き。
バリバリ使っているので、運用上発生するTIPS的なものは、今後も投稿していこうと思います。
以上でした!