![為什麼這裡的「-p1」是「patch」?](https://rvso.com/image/109231/%E7%82%BA%E4%BB%80%E9%BA%BC%E9%80%99%E8%A3%A1%E7%9A%84%E3%80%8C-p1%E3%80%8D%E6%98%AF%E3%80%8Cpatch%E3%80%8D%EF%BC%9F.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
目前目錄中的自述文件。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
.