应用补丁不会在Git中创建新创建的文件

时间:2018-09-07 11:24:45

标签: git patch

我在分支 x 中创建了一个名为ABC.txt的新文件。我没有提交更改。

然后,我想将这些更改移到名为 y 的新分支中。因此,我按照以下步骤操作:

  1. $ git diff > mypatch.diff

  2. $ git clean -fd

  3. $ git checkout y

  4. $ git apply myPatch.diff error: ABC.txt: No such file or directory

为什么git无法简单地在我所在的当前分支中创建新的ABC.txt文件?

2 个答案:

答案 0 :(得分:1)

这是因为git diff仅列出存储库中文件的更改,而您新创建的文件则没有。

最简单的解决方案是将文件添加到索引:

$ git add ABC.txt

然后在创建补丁时使用--cached选项:

$ git diff --cached > mypatch.diff

但是,如果在应用差异时发生错误,则可能是由于目标分支中不存在该文件引起的,因此git不知道将这些更改应用到何处。

通过查看块头,您可以查看diff文件是否包含对先前存在的文件或新创建的文件的更改:

如果看到:

--- a/ABC.txt
+++ b/ABC.txt

然后对现有文件进行更改。应用此修补程序不会从无效创建新文件。

但是,如果您看到:

--- /dev/null
+++ b/ABC.txt

这是一个新创建的文件,应用此补丁将创建包含这些内容的新文件。

答案 1 :(得分:0)

当我按照以下步骤操作时:

git add ABC.txt
git diff --cached > mypatch.diff

mypatch.diff包含我的新文件,但没有任何编辑过的文件。

这对我有用:

git add -N ABC.txt
git diff > mypatch.diff