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 am
。 git 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 --resolved
、git am -r
). am
命令现在将使用补丁中的元数据进行新的提交,使用您为其保留的任何文件。它完全忽略失败的补丁本身(因为你应用了它),但确实使用失败补丁的作者和消息来进行提交。然后像往常一样转到邮箱文件中的下一条消息。
看起来你的主要错误是假设每个补丁 git apply
的行为就好像它是 运行 和 --reject
,而这不是默认的。
我收到了一些补丁,可以应用到一个回购协议中,我这样做了
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 am
。 git 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 --resolved
、git am -r
). am
命令现在将使用补丁中的元数据进行新的提交,使用您为其保留的任何文件。它完全忽略失败的补丁本身(因为你应用了它),但确实使用失败补丁的作者和消息来进行提交。然后像往常一样转到邮箱文件中的下一条消息。
看起来你的主要错误是假设每个补丁 git apply
的行为就好像它是 运行 和 --reject
,而这不是默认的。