F.Ko-Jiの「一秒後は未来」

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 の意味がわからない場合は「?」を入力すればヘルプが表示されるので、それを参考にやってみましょう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

著者について

fkoji

F.Ko-Ji

Webエンジニアやってます。最近は ドットインストール の開発がお仕事です。その傍ら、個人で Meity電車遅延なう梅酒.in#グラドル自画撮り部 の部室といったネットサービスを開発・運営してます。梅酒と草野球とリアル脱出ゲームが好きです。

» 詳しいプロフィールや運営サービスの一覧など