Git 我没有应用所有更改

Git am did not apply all the changes

我收到了一些补丁,可以应用到一个回购协议中,我这样做了

git am <  the_patch.patch

遗憾的是它产生了一个错误。我检查了错误并应用了错误引用我自己的更改。 (出于某种原因,它无法应用一些简单的更改)

然后我做了 git am --resolved 我可以看到新的提交

然后我对下一个补丁做了同样的操作,唉,又是一个错误 所以我检查了错误,它是关于更改一些外部变量的,所以我编辑了我自己。

但这是唯一的错误,这是可疑的,因为我在任何地方都定义了该变量(补丁肯定可以!- 我想)所以我做了 git am --continue 并生成了提交!

还是有问题!所以我去了另一个补丁修改的地方,它没有修改!- 呃,我没有应用补丁的其余部分!

我该如何纠正?

现在我唯一能想到的就是检查并应用所有更改!

编辑:我刚刚检查过,当手动更正 git am 错误时,git am 没有继续进行补丁。 使用git am 和应用补丁的正确方法是什么?

理解git am的方法是从理解git apply开始。

git apply 命令采用一个补丁(可能会影响您的部分或全部文件)并尝试将其应用到当前签出。它永远不会自己进行新的提交;有时它无法应用补丁。当它确实打补丁失败时,你可以部分打补丁,使用--reject,但你仍然必须自己改正所有问题,然后根据最终结果自己做 git commit

到目前为止,这基本上是直截了当的。请记住,如果补丁 以某种方式应用,这意味着 补丁本身对您的软件来说是错误的 。 Git 不了解您的软件。 Git 只是应用了一些简单的文本编辑规则。这意味着即使补丁 确实 适用,它对于您的软件来说仍然可能是错误的!我们唯一确定的是,如果它适用,那么它绝对是错误的——也许不是在任何重要方面,但绝对是错误的。所以你必须在这里使用你自己的判断。

现在您了解了如何处理每个单独的补丁,我们可以继续 git amgit am命令使用git apply,方式如下:

  • git am 的输入应为包含多封电子邮件的“邮箱”文件。

  • 每封电子邮件都应该是 git format-patch 或类似邮件的输出。这意味着它包含一些新提交的适当元数据(特别是作者、日期和提交消息),以及一个补丁。

  • 补丁交给git apply。此 git apply 命令是 运行 与 --reject 如果 你 运行 git am--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 命令现在将使用补丁中的元数据进行新的提交,使用您为其保留的任何文件。它完全忽略失败的补丁本身(因为应用了它),但确实使用失败补丁的作者和消息来进行提交。然后像往常一样转到邮箱文件中的下一条消息。

看起来你的主要错误是假设每个补丁 git apply 的行为就好像它是 运行 和 --reject,而这不是默认的。