簡體   English   中英

防止git apply刪除舊文件

[英]Prevent git apply from deleting old files

我有兩個文件ab ,每個文件都包含它們的名稱。 我創建了這樣的補丁:

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

如果您嘗試使用兩個以上的文件來執行此操作,則會出現錯誤:

$ 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 repo。 您可以使用創建沒有文件的初始提交

git commit --allow-empty -m "Initial"

並復制文件ab

運行git add --allgit 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM