防止git apply删除旧文件

时间:2016-11-24 21:12:00

标签: git diff patch

我有两个文件ab,每个文件都包含其名称。我创建了一个这样的补丁:

git diff a b > test.patch

现在,在应用补丁时,文件a将被删除:

git apply test.patch

在创建或应用补丁时,有没有办法阻止git删除文件?

1 个答案:

答案 0 :(得分:0)

您使用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>

一种解决方法(假设您要创建添加了ab的补丁)将在临时目录中创建新的git仓库。您可以使用

创建没有文件的初始提交
git commit --allow-empty -m "Initial"

并复制文件ab

运行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