Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
应用修补程序不会在Git中创建新创建的文件_Git_Patch - Fatal编程技术网

应用修补程序不会在Git中创建新创建的文件

应用修补程序不会在Git中创建新创建的文件,git,patch,Git,Patch,我在分支x中创建了一个名为ABC.txt的新文件。我没有提交更改 然后我想把这些变化转移到一个叫做y的新分支中。因此,我遵循以下步骤: git add ABC.txt git diff --cached > mypatch.diff $git diff>mypatch.diff $git clean-fd $git签出y $git应用myPatch.diff 错误:ABC.txt:没有这样的文件或目录 为什么git不能在我所在的当前分支中简单地创建我的新ABC.txt文件?这是因为git

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

然后我想把这些变化转移到一个叫做y的新分支中。因此,我遵循以下步骤:

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

$git clean-fd

$git签出y

$git应用myPatch.diff 错误:ABC.txt:没有这样的文件或目录

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

这是因为git diff只列出了属于存储库一部分的文件的更改,而您新创建的文件不是

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

$ git add ABC.txt
然后在创建修补程序时使用-cached选项:

$ git diff --cached > mypatch.diff
但是,如果在应用差异时发生错误,可能是因为目标分支中不存在该文件,所以git不知道在哪里应用这些更改

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

如果你看到:

--- a/ABC.txt
+++ b/ABC.txt
然后对现有文件进行更改。应用此修补程序不会从void创建新文件

但如果你看到:

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

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

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

git add ABC.txt
git diff --cached > mypatch.diff
mypatch.diff包含我的新文件,但没有我编辑过的文件

以下是对我有效的方法:

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

当我查看mypatch.diff文件时,我可以看到新创建的文件内容也在那里。@JudeNiroshan:啊,但它可能不是新文件。我的意思是diff只包含文件中的一些更改,因为该文件已经存在,但它在分支y中不存在,因此没有地方应用这些更改。@JudeNiroshan:如果是这样,您需要执行git diff,在创建文件之前提交,或者只是手动复制ABC.txt文件。供将来参考,你想做的事可以用git stash来完成。或者,在大多数情况下,您可以在工作树和/或索引中保留更改的同时执行签出,git会在出现问题时警告您。