開発をしていて、remoteに正しいコードがあり、ローカルで再度手順の確認をするために gitコマンドで戻った。
git reset --hard <commit id>
で同じように実装してコードを確認できたので、git stash (今の変更を他の領域に一時退避するコマンド)したのちに、下記コマンドを実行したけれど、コードが完全にリモートと同じではない部分がある。
git pull -f origin < branch_name >
調査してみると、HEADというポインターも一緒に戻す必要があった。
HEAD
はGitで現在チェックアウトしているコミットを指し示すポインターです。通常、これは作業中のブランチの最新コミットを指します。HEAD
が指しているコミットは、リポジトリの作業ディレクトリの内容を表しており、Gitコマンドを使って操作する際の基点となる。
git reset --hard HEAD
コマンドを使用すると、以下のことが行われるようだ。HEAD
コミットの状態にリセットします。つまり、git add でステージされた変更がすべて解除される。HEAD
コミットの内容に完全に一致するように変更されます。これにより、HEAD
以降に行われた未コミットの変更(ファイルの追加、変更、削除)がすべて破棄される。簡単に言うと、git reset --hard HEAD
は現在のブランチの最後のコミット状態にすべてを戻すコマンドです。これを使用すると、そのブランチにおける最新の確定した状態(最後のコミット)に、インデックスと作業ディレクトリが再設定されます。
なのでリモートのブランチの内容をローカルに完全に反映させ、ローカルの変更を完全に破棄するにははつぎのようなコマンドを利用すべきだった。
//ポインターも戻す
git reset --hard HEAD
//退避場所も保険でクリアしておく
git stash clear
git fetch
と git reset
の組み合わせです。//リモートをローカルにもってくる マージはされない
git fetch origin
//--hardを使ってリモートをローカルに反映
git reset --hard origin/branch_name
このコマンドは、リモートの branch_name
ブランチの最新状態を取得し、ローカルのブランチをその状態にリセットします。これにより、ローカルの環境がリモートの状態に完全に一致する。
これらのコマンドを実行することで、ローカルのリポジトリの状態はリモートのブランチと完全に一致するようになります。これにより、リモートの最新のコードと完全に同期することができます。
しかしGit考えた、リーナス・トーバルズさんは偉いな〜 と思う今日このごろでした。
リーナス・トーバルさん(フィンランド出身)の名言を参考までに掲載しておきます