![ここで `patch` に `-p1` が付いているのはなぜですか?](https://rvso.com/image/109231/%E3%81%93%E3%81%93%E3%81%A7%20%60patch%60%20%E3%81%AB%20%60-p1%60%20%E3%81%8C%E4%BB%98%E3%81%84%E3%81%A6%E3%81%84%E3%82%8B%E3%81%AE%E3%81%AF%E3%81%AA%E3%81%9C%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
コミットしたファイルの変更を元に戻すには、https://stackoverflow.com/a/2620822/156458
#!/bin/bash
function output_help {
echo "usage: git-revert-single-file <sha1> <file>"
}
sha1=$1
file=$2
if [[ $sha1 ]]; then
git diff $sha1..$sha1^ -- $file | patch -p1
else
output_help
fi
なぜ-p1
patch
git diff $sha1..$sha1^ -- $file | patch -p1
ありがとう。
答え1
は、パッチにgit diff
偽のディレクトリa
とを追加するため、それらをスキップする必要があります(したがって、)。これは、ファイルシステムに存在しない情報を表すために行われます(比較されるファイルは同時に存在しません)。たとえば、b
patch
-p1
git
diff --git a/README b/README
index ce01362..a1e6cf9 100644
--- a/README
+++ b/README
@@ -1 +1,2 @@
hello
+Tim
現在のディレクトリのREADMEファイルの場合diff
、
--- README.orig 2017-04-07 20:39:50.843962430 +0200
+++ README 2017-04-07 20:39:56.284108455 +0200
@@ -1 +1,2 @@
hello
+Tim
(オリジナルのコピーを別の場所に保存していると仮定します)。ここではディレクトリがないことに注意してください (ファイルは現在のディレクトリにあるため)。
後者のパッチは にそのまま適用されますpatch
。前者では各パスの最初の要素を削除する必要があるため、 となります-p1
。