Git am没有应用所有更改

dldeef67  于 12个月前  发布在  Git
关注(0)|答案(2)|浏览(116)

我已经收到了一些补丁,适用于回购,并做到这一点,我这样做

git am <  the_patch.patch

字符串
不幸的是,它产生了一个错误。我检查了错误,并应用了错误引用我自己的更改。(由于某种原因,它不能应用一些简单的更改)
然后我执行git am --resolved,我可以看到新提交
然后我做了同样的下一个补丁,唉,又一个错误,所以我检查了错误,它是关于改变一些外部变量,所以我编辑我自己。
但这是唯一的错误,这是可疑的,因为我没有定义这个变量(补丁肯定会这样做!-我想),所以我做了git am --continue,提交生成了!
仍然鱼!所以我去了另一个地方,补丁修改和 * 它没有修改!*-尔格上午没有应用其余的补丁!
我该如何纠正?
现在我唯一能想到的就是检查和应用一个接一个的所有变化!
编辑:我刚刚检查了一下,当手动纠正git am错误时,git am不会继续打补丁。使用git am和应用补丁的正确方法是什么?

pbwdgjma

pbwdgjma1#

理解git am的方法是从理解git apply开始。
git apply命令获取一个补丁--这可能会影响你的部分或全部文件--并尝试将它应用到当前的 checkout 中。有时它无法应用补丁。当它 * 确实 * 无法应用补丁时,您可以让它 * 部分 * 应用补丁,使用--reject,但您仍然必须自己纠正所有问题,然后根据最终结果自己做git commit
到目前为止,这基本上是很简单的。记住,如果补丁在某种程度上不适用,这意味着补丁本身对你的软件是错误的。Git不理解你的软件。Git只是应用一些简单的文本编辑规则。这意味着即使补丁适用,它仍然可能对你的软件是错误的!我们所能肯定的是,如果它不适用,它肯定是错误的--也许不是以任何重要的方式,但肯定是错误的。
现在您已经了解了每个补丁是如何处理的,我们可以继续到git amgit am命令 * 使用 * git apply,如下所示:

  • git am的输入应该是一个“邮箱”文件,包含多个电子邮件。
  • 每封邮件都应该是git format-patch或类似的输出,这意味着它包含了一些新提交的元数据(作者,日期,特别是提交消息),以及一个补丁。
  • 补丁交给git apply。如果 * 您使用--reject运行git am,则此git apply命令将使用--reject运行,否则将不使用--reject运行。

git apply成功时,git am使用提交消息进行提交,并继续处理邮箱文件中的下一封电子邮件。当git apply由于任何原因失败时,git am将继续状态写入隐藏的.git目录中的隐藏目录,并在自己的失败中停止(以及一条未完成而停止的消息)。
由于git apply已在此处停止,您的作业与您自己使用git apply时的作业相同。如果您未使用--reject,则必须手动应用 * 整个补丁 *。如果您使用--reject,则必须手动应用 * 所有被拒绝的补丁 *。我们已经知道,由于git apply失败,该补丁 * 不适合您的软件 *,所以你一定很有判断力
手动应用补丁并确保修复了任何不一致之后,可以运行git am --continue或其其他两种拼写中的任何一种(git am --resolvedgit am -r)。am命令现在将使用补丁中的元数据进行新提交,使用任何你留下的文件。它 * 完全忽略失败的补丁本身 *(因为 you 应用了它),但是使用失败的补丁的作者和消息来提交。然后它像往常一样移动到邮箱文件中的下一条消息。
看起来你的主要错误是假设每个补丁git apply的行为就像它是用--reject运行的,而这不是默认的。

kmynzznz

kmynzznz2#

使用目录重定向标志--directory= < where you want to apply patch that folder >/path/0001mypatch.patch
$ git am -3 -k --directory= < where you want to apply patch that folder >/path/0001mypatch.patch

相关问题