為什麼這裡的「-p1」是「patch」?

為什麼這裡的「-p1」是「patch」?

要在提交中恢復對文件的更改,請從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

為什麼是-p1patch

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.

相關內容