![여기서 `-p1`이 `패치`인 이유는 무엇입니까?](https://rvso.com/image/109231/%EC%97%AC%EA%B8%B0%EC%84%9C%20%60-p1%60%EC%9D%B4%20%60%ED%8C%A8%EC%B9%98%60%EC%9D%B8%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%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
.