![Warum steht `-p1` hier für `patch`?](https://rvso.com/image/109231/Warum%20steht%20%60-p1%60%20hier%20f%C3%BCr%20%60patch%60%3F.png)
Um die Änderungen an einer Datei in einem Commit rückgängig zu machen,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
Warum ist -p1
inpatch
git diff $sha1..$sha1^ -- $file | patch -p1
Danke.
Antwort1
Weil zu seinen Patches git diff
falsche Verzeichnisse a
und hinzugefügt werden b
, die übersprungen werden müssen patch
(daher das -p1
). git
tut dies, um Informationen darzustellen, die nicht im Dateisystem vorhanden sind (die verglichenen Dateien existieren nicht gleichzeitig); zum Beispiel
diff --git a/README b/README
index ce01362..a1e6cf9 100644
--- a/README
+++ b/README
@@ -1 +1,2 @@
hello
+Tim
für eine README-Datei im aktuellen Verzeichnis. diff
würde erzeugen
--- README.orig 2017-04-07 20:39:50.843962430 +0200
+++ README 2017-04-07 20:39:56.284108455 +0200
@@ -1 +1,2 @@
hello
+Tim
(vorausgesetzt, wir haben anderswo eine Kopie des Originals aufbewahrt); beachten Sie das Fehlen von Verzeichnissen hier (da sich die Dateien im aktuellen Verzeichnis befinden).
Der letztere Patch wird unverändert mit angewendet patch
; beim ersteren muss das erste Element jedes Pfads entfernt werden, daher das -p1
.