我创建了一个名为ABC.txtin 分支x的新文件。我没有提交更改。
然后我想将这些更改移至名为y的新分支中。所以我按照以下步骤操作:
$ git diff > mypatch.diff
$ git clean -fd
$ git checkout y
$ git apply myPatch.diff
error: ABC.txt: No such file or directory
为什么 git 不能简单地在我所在的当前分支中创建新的 ABC.txt 文件?
这是因为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)
然后它是一个新创建的文件,应用此补丁将创建一个包含这些内容的新文件。