1

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

git diff > my_patch.patch

检查补丁:

more my_patch.patch

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

git apply --stat my_patch.patch
0 files changed

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

重现问题的步骤:

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

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

4

1 回答 1

0

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

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

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

签字人:Jerry Zhang

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

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

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

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

[--详细 | --quiet] [--unsafe-paths] [--allow-empty] [...]

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

--allow-empty

不要为不包含差异的补丁返回错误。
这包括空补丁和仅带有提交文本的补丁。

于 2021-12-24T19:07:53.353 回答