gitで変更内容を元に戻す時にも -p オプションが使えて便利
git add する時に「-p」をつけると、この部分は add するけどこの部分は add しないといった細かい指定ができて便利なのですが、同じことが reset とか checkout でもできるというのを最近知りました。
作業をしている途中で、変更した箇所を元に戻したい時はよくあります。もしまだ add していなければ、
% git checkout ファイル名
で変更内容をなかったことにして、最新のコミットの状態に戻すことができます。
ただ作業内容によっては、変更した箇所の一部だけ残して元に戻したいということもよくあって、その時にも同様に -p オプションが使えるわけです。
% git checkout -p diff --git a/chef-repo/nodes/192.168.33.50.json b/chef-repo/nodes/192.168.33.50.json index 6a1a678..c3dc114 100644 --- a/chef-repo/nodes/192.168.33.50.json +++ b/chef-repo/nodes/192.168.33.50.json @@ -12,9 +12,13 @@ "api_apache_port": 55983 } }, + "crontab": { + "user": "vagrant" + }, "run_list":[ //"mod_rpaf", - "httpd"//, + "httpd" //"nginx" + //"crontab" ] } Discard this hunk from worktree [y,n,q,a,d,/,s,e,?]?
このように「Discard this hunk from worktree [y,n,q,a,d,/,s,e,?]? 」と尋ねられるので、「y」を入力すればこの変更箇所は元に戻り、「n」を入力すればスキップされます。
もう少し細かく分割したいときには「s」を入力すると、
Discard this hunk from worktree [y,n,q,a,d,/,s,e,?]? s Split into 3 hunks. @@ -12,5 +12,8 @@ "api_apache_port": 55983 } }, + "crontab": { + "user": "vagrant" + }, "run_list":[ //"mod_rpaf", Discard this hunk from worktree [y,n,q,a,d,/,j,J,g,e,?]?
このように、変更箇所をより詳細に指定できるようになります。
もしすでに add してステージされている内容であれば、
% git reset -p
とすることで、同様に一部分をアンステージすることもできます。
ちなみに y とか n の意味がわからない場合は「?」を入力すればヘルプが表示されるので、それを参考にやってみましょう。
コメントを残す