应用使用 git diff 创建的 git patch

Ale*_*ega 7 git diff patch apply format-patch

我正在尝试将未提交的更改从本地 git 存储库移动到另一个本地存储库。在 repo 1 上,我创建了一个如下所示的补丁:

git diff > my_patch.patch
Run Code Online (Sandbox Code Playgroud)

检查补丁:

more my_patch.patch
Run Code Online (Sandbox Code Playgroud)

git diff 我得到与在第一个存储库上运行相同的输出。在第二个仓库中我运行:

git apply --stat my_patch.patch
0 files changed
Run Code Online (Sandbox Code Playgroud)

如果我跑步,git apply my_patch.patch我不会有任何效果。
我创建的补丁错误吗?我应用错了吗?

重现问题的步骤:

  1. 克隆存储库 2 次(同一分支签出)
  2. 在第一个存储库中,对文件进行一些更改(未提交)。
  3. 从更改创建补丁:git diff > ~/my_patch.patch
  4. 转到第二个存储库。尝试并应用补丁:git apply ~/my_patch.patch
  5. 跑步git status。没有变化!

建议另一种将未提交的更改转移到另一个本地存储库的方法也可以很好地解决我的问题。

Von*_*onC 4

现在不仅您的用例(2021 年第 4 季度,Git 2.34+)按预期工作,而且 Git 2.35(2022 年第 1 季度)“ git applyman也被教导在没有带有该选项的补丁的情况下忽略消息--allow-empty
它学会了尊重--quiet命令行给出的选项。

请参阅Jerry 张 ( )的提交 324eb77提交 c21b8ae(2021 年 12 月 13 日)。(由Junio C Hamano 合并 -- --提交62a3a27,2021年 12 月 22 日)jerry-skydio
gitster

git-apply: 添加--allow-empty标志

签字人:张杰

当重放差异或提交时,某些用户或脚本会将“ git diffman输出传输到man) 。 在这些情况下,他们将依靠“ ”的返回值来了解差异是否已成功应用。git apply
git apply

但是,对于空提交,“ git apply”将会失败。
这使脚本变得复杂,因为它们必须缓冲 diff 并检查其长度,或者使用“退出代码”再次运行 diff,本质上是执行 diff 两次。

将“ --allow-empty”标志添加到“ ”,这允许它通过不执行任何git apply操作并返回 0 来处理由( man )创建的空差异和空提交。git format-patch --always

git apply现在包含在其手册页中:

[--详细| --安静] [--不安全路径] [--允许空] [...]

git apply现在包含在其手册页中:

--allow-empty

对于不包含差异的补丁,不要返回错误。
这包括空补丁和仅包含提交文本的补丁。