首页 > 解决方案 > 具有多个提交的 Git 补丁,最后一个未应用

问题描述

我有 2 个存储库,正在尝试使用补丁将更改从一个存储库移动到另一个存储库。以下是场景。有一个提交 ( f31541e) 会更改 3 个文件的内容。然后最后一次提交(日志顶部b546664)删除其中一个文件 c.txt。

$ git log                                                                       
**commit b54666405a5126e6efcb8b605b3bb0182200f258** (HEAD -> develop, origin/develop
)                                                                               
Author: Andy Whelan                                         
Date:   Tue Feb 25 12:31:24 2020 -0500                                                                                                                 
    Deleted c.txt                                     
**commit f31541e1b6f417deab23e38bab25f854ac45ade6** (origin/patch-delete-c, origin/p
atch-branch-src-us1, patch-delete-c, patch-branch-src-us1)                      
Author: Andy Whelan                                         
Date:   Tue Feb 25 11:00:49 2020 -0500                                                         
    Modified all 3 files.                                          
**commit 32b12065cfa3aa25f07c2698197788792c55b99d** (origin/master, master)         
Author: Andy Whelan                                         
Date:   Tue Feb 25 08:39:54 2020 -0500                                          
    Adding a.txt, b.txt, c.txt                                                  

我正在创建一个补丁文件,如下所示:

git format-patch -2 b54666405a5126e6efcb8b605b3bb0182200f258 --stdout > can.patch

补丁文件(下)在底部有最新的更改(已删除的文件),另一个在顶部。以下是这个文件的一些内容,我已经注释掉了 3 个文件中的文本被更改的部分,因为这有效(//content 更改了 3 个文件,这有效)。我遇到的问题是 c.txt 没有被删除,就像它应该的那样。应用 3 个文件中的文本更改。但文件删除不是。任何人都知道我可能做错了什么?

From f31541e1b6f417deab23e38bab25f854ac45ade6 Mon Sep 17 00:00:00 2001
From: Me <me@someplace.com>
Date: Tue, 25 Feb 2020 11:00:49 -0500
Subject: [PATCH 1/2] patch modifies all 3 files

---
//content changes 3 files, this works
-- 
2.20.1.windows.1


From b54666405a5126e6efcb8b605b3bb0182200f258 Mon Sep 17 00:00:00 2001
From: Me <me@someplace.com>
Date: Tue, 25 Feb 2020 12:31:24 -0500
Subject: [PATCH 2/2] applied patch-delete-c

---
 c.txt | 2 --
 1 file changed, 2 deletions(-)
 delete mode 100644 c.txt

diff --git a/c.txt b/c.txt
deleted file mode 100644
index 1a7ca5c..0000000
--- a/c.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-this is file c
-add a line to c
\ No newline at end of file
-- 
2.20.1.windows.1

标签: git

解决方案


请参阅上面 torek 关于使用的评论

git am <patchfilename>

这才是正确答案。


推荐阅读