阻止 git 申请删除旧文件
Prevent git apply from deleting old files
我有两个文件 a
和 b
,每个文件都包含他们的名字。我创建了一个这样的补丁:
git diff a b > test.patch
现在应用补丁时,文件 a
被删除:
git apply test.patch
有没有办法防止 git 在创建或应用补丁时删除文件?
您使用 git diff
的语法是
git diff [--no-index] <path> <path>
在你的例子中,--no-index
是隐含的。因此,命令
git diff a b
假定 b
是文件 a
的较新版本。 运行 您的命令会生成如下所示的补丁:
$ git diff --no-index 123.txt 456.txt
diff --git a/123.txt b/456.txt
index 97f93f4..9fa0bac 100644
--- a/123.txt
+++ b/456.txt
@@ -1 +1 @@
-123.txt
+456.txt
如果您尝试对超过 2 个文件执行此操作,则会出现错误:
$ git diff -- 123.txt 456.txt 789.txt
Not a git repository
To compare two paths outside a working tree:
usage: git diff [--no-index] <path> <path>
$ git diff --no-index 123.txt 456.txt 789.txt
usage: git diff --no-index <path> <path>
一种解决方法(假设您要创建一个同时添加了 a
和 b
的补丁)是在临时目录中创建一个新的 git 存储库。您可以使用
创建一个没有文件的初始提交
git commit --allow-empty -m "Initial"
并将文件a
和b
复制到.
在运行git add --all
之后,git diff --staged > test.patch
会创建一个合适的补丁,像这样:
diff --git a/123.txt b/123.txt
new file mode 100644
index 0000000..97f93f4
--- /dev/null
+++ b/123.txt
@@ -0,0 +1 @@
+123.txt
diff --git a/456.txt b/456.txt
new file mode 100644
index 0000000..9fa0bac
--- /dev/null
+++ b/456.txt
@@ -0,0 +1 @@
+456.txt
diff --git a/789.txt b/789.txt
new file mode 100644
index 0000000..a25ef22
--- /dev/null
+++ b/789.txt
@@ -0,0 +1 @@
+789.txt
我有两个文件 a
和 b
,每个文件都包含他们的名字。我创建了一个这样的补丁:
git diff a b > test.patch
现在应用补丁时,文件 a
被删除:
git apply test.patch
有没有办法防止 git 在创建或应用补丁时删除文件?
您使用 git diff
的语法是
git diff [--no-index] <path> <path>
在你的例子中,--no-index
是隐含的。因此,命令
git diff a b
假定 b
是文件 a
的较新版本。 运行 您的命令会生成如下所示的补丁:
$ git diff --no-index 123.txt 456.txt
diff --git a/123.txt b/456.txt
index 97f93f4..9fa0bac 100644
--- a/123.txt
+++ b/456.txt
@@ -1 +1 @@
-123.txt
+456.txt
如果您尝试对超过 2 个文件执行此操作,则会出现错误:
$ git diff -- 123.txt 456.txt 789.txt
Not a git repository
To compare two paths outside a working tree:
usage: git diff [--no-index] <path> <path>
$ git diff --no-index 123.txt 456.txt 789.txt
usage: git diff --no-index <path> <path>
一种解决方法(假设您要创建一个同时添加了 a
和 b
的补丁)是在临时目录中创建一个新的 git 存储库。您可以使用
git commit --allow-empty -m "Initial"
并将文件a
和b
复制到.
在运行git add --all
之后,git diff --staged > test.patch
会创建一个合适的补丁,像这样:
diff --git a/123.txt b/123.txt
new file mode 100644
index 0000000..97f93f4
--- /dev/null
+++ b/123.txt
@@ -0,0 +1 @@
+123.txt
diff --git a/456.txt b/456.txt
new file mode 100644
index 0000000..9fa0bac
--- /dev/null
+++ b/456.txt
@@ -0,0 +1 @@
+456.txt
diff --git a/789.txt b/789.txt
new file mode 100644
index 0000000..a25ef22
--- /dev/null
+++ b/789.txt
@@ -0,0 +1 @@
+789.txt