![Por que `-p1` deve ser `patch` aqui?](https://rvso.com/image/109231/Por%20que%20%60-p1%60%20deve%20ser%20%60patch%60%20aqui%3F.png)
Para reverter as alterações em um arquivo em um commit, dehttps://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
Por que está -p1
empatch
git diff $sha1..$sha1^ -- $file | patch -p1
Obrigado.
Responder1
Porque git diff
adiciona diretórios falsos a
e b
seus patches, que precisam ser ignorados patch
(daí o -p1
). git
faz isso para representar informações que não estão no sistema de arquivos (os arquivos comparados não existem simultaneamente); por exemplo
diff --git a/README b/README
index ce01362..a1e6cf9 100644
--- a/README
+++ b/README
@@ -1 +1,2 @@
hello
+Tim
para um arquivo README no diretório atual. diff
produziria
--- README.orig 2017-04-07 20:39:50.843962430 +0200
+++ README 2017-04-07 20:39:56.284108455 +0200
@@ -1 +1,2 @@
hello
+Tim
(assumindo que mantivemos uma cópia do original em outro lugar); observe a ausência de diretórios aqui (já que os arquivos estão no diretório atual).
O último patch se aplica como está patch
; o primeiro precisa ter o primeiro elemento de cada caminho removido, daí o -p1
.