Применение патча не создает вновь созданные файлы в Git - PullRequest
0 голосов
/ 07 сентября 2018

Я создал новый файл с именем ABC.txt в ветке 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 в текущей ветке, в которой я нахожусь?

1 Ответ

0 голосов
/ 07 сентября 2018

Это потому, что git diff перечисляет только изменения файлов, которые являются частью репозитория, а ваш вновь созданный файл - нет.

Самое простое решение - добавить файл в индекс:

$ git add ABC.txt

А затем используйте опцию --cached при создании патча:

$ git diff --cached > mypatch.diff

Однако, если ошибка возникает при применении diff, она может быть вызвана тем, что файл не существует в целевой ветви, поэтому git не знает, где применить эти изменения.

Вы можете увидеть, содержит ли файл diff изменения ранее существовавшего файла или вновь созданного файла, посмотрев на заголовок чанка:

Если вы видите:

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

Затем вносятся изменения в существующий файл. Применение этого патча не создаст новый файл из void.

Но если вы видите:

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

Тогда это вновь созданный файл, и применение этого патча создаст новый файл с этим содержимым.

...