Git создать патч с diff

Я пробовал делать

git diff 13.1_dev sale_edit > patch.diff

Затем я попытался сделать git apply patch.diff в другой ветке, но я получил патч не применяется. Как создать патч файлы из diff, которые я могу использовать с помощью git?

Полученные ошибки:

$ git apply --ignore-space-change --ignore-whitespace diff.diff 
diff.diff:9: trailing whitespace.

diff.diff:10: trailing whitespace.
    function set_change_sale_date() 
diff.diff:12: space before tab in indent.
      $this->sale_lib->set_change_sale_date($this->input->post('change_sale_date'));
diff.diff:14: trailing whitespace.

diff.diff:15: trailing whitespace.
    function set_change_sale_date_enable() 
warning: application/controllers/sales.php has type 100755, expected 100644
error: patch failed: application/controllers/sales.php:520
error: application/controllers/sales.php: patch does not apply
warning: application/language/english/sales_lang.php has type 100755, expected 100644
error: patch failed: application/language/english/sales_lang.php:134
error: application/language/english/sales_lang.php: patch does not apply
warning: application/libraries/Sale_lib.php has type 100755, expected 100644
error: patch failed: application/models/sale.php:170
error: application/models/sale.php: patch does not apply
warning: application/views/sales/register.php has type 100755, expected 100644
error: patch failed: application/views/sales/register.php:361
error: application/views/sales/register.php: patch does not apply

Я пытаюсь это сделать на Mac

Ответ 1

Попробуйте:

git apply --ignore-space-change --ignore-whitespace patch.diff

Как упоминалось в "git: патч не применяется", это может быть вызвано:

  • окончания строки, отличающиеся от локальной файловой системы и удаленного репо.
    Пользователь core.eol в .gitattributes - хороший подход (см. "git принудительное кодирование файла при фиксации)
  • бит выполнения ('x').
    Это может привести к установке git config core.filemode false, за которой следует git reset --hard HEAD (убедитесь, что у вас нет незафиксированных изменений или они будут потеряны).

Ответ 2

Вы можете применить патч как 3-стороннее слияние:

git diff 13.1_dev sale_edit > patch.diff
git apply -3 patch.diff

Он должен вызвать конфликт, чтобы вы могли разрешить его вручную. Или вы можете пойти с одним слоем, проложив патч до git -apply напрямую:

git diff 13.1_dev sale_edit | git apply -3

Отменить патч:

git diff 13.1_dev sale_edit | git apply -3 -R

(примечание: это то же самое, что и команды выше, без двухэтапного процесса создания файла исправления)

git help apply

-3, --3way           
When the patch does not apply cleanly, fall back on 3-way merge if 
the patch records the identity of blobs it is supposed to apply to, 
and we have those blobs available locally, possibly leaving 
the conflict markers in the files in the working tree for the user 
to resolve...

Ответ 3

Здесь вы должны попробовать это с веткой, с которой вы сталкиваетесь.

git diff 13.1_dev sale_edit > patch.diff yourBranch()