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

Jud*_*han 8 git patch

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

然后我想将这些更改移至名为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 文件?

rod*_*igo 7

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

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

$ git add ABC.txt
Run Code Online (Sandbox Code Playgroud)

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

$ git diff --cached > mypatch.diff
Run Code Online (Sandbox Code Playgroud)

但是,如果在应用 diff 时发生错误,可能是因为目标分支中不存在该文件,因此git不知道在哪里应用这些更改。

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

如果你看到:

--- a/ABC.txt
+++ b/ABC.txt
Run Code Online (Sandbox Code Playgroud)

然后是对现有文件的更改。应用此补丁不会从 void 创建新文件。

但如果你看到:

--- /dev/null
+++ b/ABC.txt
Run Code Online (Sandbox Code Playgroud)

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