Git 作業内容の変更をリセット

Git

競合した時や、作業内容を直前のコミットに戻したいときのリセットの強行策をメモ。
破滅的だけど一番単純な方法です。

スポンサーリンク

前置き

プル失敗

$ git pull
Updating e10f753..4d168b5
error: Your local changes to the following files would be overwritten by merge:
        app/views/sample/index.phtml
Please commit your changes or stash them before you merge.
Aborting

競合したファイルの確認

$ git diff
diff --git a/app/views/sample/index.phtml b/app/views/sample/index.phtml
index 6b7d8bb..b7bce11 100644
--- a/app/views/sample/index.phtml
+++ b/app/views/sample/index.phtml

どうやら、index.phtmlが競合している模様。
マージを考えず、単純にローカルの変更をなかったことにしてもよい場合は、リセットで対応してしまいます。

リセット方法

以下2つは自分がよく使うリセット方法です。
ローカルとはいえ、変更内容がなくるのは怖いものです。
取返しのつかないことにならぬよう、計画的に実行しましょう。。

変更内容を全部消す

ローカルでのすべての変更は打ち消され、前回のコミット状態に戻ります。

$ git reset --hard HEAD

特定のファイルのみなかったことにする

ファイル単位でリセットする方法です。

$ git checkout HEAD ファイルパス

こちらでリセットする場合の注意点は「ファイルパス」の指定方法です。
カレントディレクトリに移動して、以下のようにファイル名だけで指定しても・・・

$ git checkout HEAD index.php
error: pathspec 'index.php' did not match any file(s) known to git.

と怒られてしまうのでファイルパスを含めて指定すること。

プルして確認

どちらかでリセットして再度Pullしてみる。

$ git pull
Updating e10f753..4d168b5
Fast-forward
 app/views/sample/index.phtml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

プル成功!

以上、なにも考えず自分の作業内容をリセットしてクリーンしたいときに使える強行策でした。

タイトルとURLをコピーしました