我在分支 x 中创建了一个名为ABC.txt
的新文件。我没有提交更改。
然后,我想将这些更改移到名为 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文件?
答案 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