![¿Por qué está aquí "-p1" para "parchear"?](https://rvso.com/image/109231/%C2%BFPor%20qu%C3%A9%20est%C3%A1%20aqu%C3%AD%20%22-p1%22%20para%20%22parchear%22%3F.png)
Para revertir los cambios a un archivo en una confirmación, desdehttps://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 qué está -p1
enpatch
git diff $sha1..$sha1^ -- $file | patch -p1
Gracias.
Respuesta1
Porque git diff
agrega directorios falsos a
y b
a sus parches, que deben omitirse patch
(de ahí el -p1
). git
hace esto para representar información que no está en el sistema de archivos (los archivos que se comparan no existen simultáneamente); Por ejemplo
diff --git a/README b/README
index ce01362..a1e6cf9 100644
--- a/README
+++ b/README
@@ -1 +1,2 @@
hello
+Tim
para un archivo README en el directorio actual. diff
produciría
--- README.orig 2017-04-07 20:39:50.843962430 +0200
+++ README 2017-04-07 20:39:56.284108455 +0200
@@ -1 +1,2 @@
hello
+Tim
(suponiendo que hayamos guardado una copia del original en otro lugar); tenga en cuenta la ausencia de directorios aquí (ya que los archivos están en el directorio actual).
El último parche se aplica tal cual con patch
; el primero necesita eliminar el primer elemento de cada ruta, de ahí el -p1
.