gpt4 book ai didi

git - 在 git 中应用补丁时出错

转载 作者:IT王子 更新时间:2023-10-29 01:29:51 28 4
gpt4 key购买 nike

我有一个浅克隆,我在上面做了三个提交。这是日志:

$ git log --oneline --graph --decorate --all
* d3456fd (HEAD, master) patch 3
* 9713822 patch 2
* 6f380a6 patch 1
* 8a1ce1e (origin/master, origin/HEAD) from full clone
* 7c13416 added from shallow
* 3b3ed39 removed email
* cfbed6c further modifications
* a71254b added for release 2.1
* 7347896 (grafted) changes for release 2

现在我从这里创建一个补丁:

$ git format-patch -k --stdout origin > ../format_since_origin.patch

我想在另一个克隆中应用这个补丁,这是一个完整的克隆。
这是日志:

$ git log --oneline --graph --decorate --all
* 8a1ce1e (HEAD, origin/master, master) from full clone
* 7c13416 added from shallow
* 3b3ed39 removed email
* cfbed6c further modifications
* a71254b added for release 2.1
* 7347896 changes for release 2
* b1a8797 changes to ttwo files
* 603710c changed test report
* 16b20b3 added test_report.txt
* f0871ea modified file1.xml
* dd94bfc added file1.xml
* 00758aa second commit
* 49f9968 first commit

我无法应用从上面的浅克隆创建的补丁。我收到以下错误。

$ git am -3 /c/temp/git/format_since_origin.patch
Applying: patch 1
Using index info to reconstruct a base tree...
error: patch failed: file1.c:6
error: file1.c: patch does not apply
Did you hand edit your patch?
It does not apply to blobs recorded in its index.
Cannot fall back to three-way merge.
Patch failed at 0001 patch 1
When you have resolved this problem run "git am --resolved".
If you would prefer to skip this patch, instead run "git am --skip".
To restore the original branch and stop patching run "git am --abort".

知道为什么这个补丁失败了吗?还是我的方法完全错误?

更新:

它适用于以下

$ git am -3 --ignore-whitespace /c/temp/git/format_since_origin.patch Applying: patch 1 Applying: patch 2 Applying: patch 3

现在,按照 Charles 的建议 - 如果我尝试 git diff,我会收到如下错误。

$ git diff -p origin > ../dif_origin.patch

申请时,

$ git apply --ignore-whitespace --inaccurate-eof /c/temp/git/dif_origin.patch
c:/temp/git/dif_origin.patch:9: trailing whitespace.
patch change for file1.c
c:/temp/git/dif_origin.patch:18: trailing whitespace.
patch this xml guy
c:/temp/git/dif_origin.patch:29: trailing whitespace.
fsdfsd
c:/temp/git/dif_origin.patch:30: trailing whitespace.
patch this report
error: patch failed: file1.c:6
error: file1.c: patch does not apply
error: patch failed: file1.xml:2
error: file1.xml: patch does not apply
error: patch failed: tr/test_report.txt:2
error: tr/test_report.txt: patch does not apply

最佳答案

当 git apply 正常工作时,你根本没有输出:

$ git apply example.patch
[nothing returned]

如果您想查看幕后发生的事情,可以使用 -v(详细)标志:

$ git apply -v example.patch
Checking patch includes/common.inc...
Applied patch includes/common.inc cleanly.

但是,如果在您自己的本地 git 工作副本中运行 git apply,即使使用 -v(详细)标志,git apply 也可能什么都不做,也不会给出任何输出。如果发生这种情况,请检查您在目录树中的位置 - git apply 可能在其他位置工作。

git apply 的替代方法是使用 patch 命令:

$ patch -p1 < example.patch

这是 git apply 命令可以生成的其他输出及其含义。补丁不适用

$ git apply example.patch
error: patch failed: includes/common.inc:626
error: includes/common.inc: patch does not apply``

Git 无法应用补丁中的更改,因为它无法找到有问题的代码行;它们必须已被另一次提交更改或删除。试试这些:

确保补丁尚未应用。在 git-log 中查找它或简单地检查代码以查看更改是否已经存在。如果是,你就完成了。如果不是,或者只有其中一些是,请尝试其他方法:

使用 patch -p1 < filename.patch .而 git-apply 完全拒绝有任何错误的补丁,而 patch -p1 则大块大块地工作,尽可能多地应用单独的更改。它在修改文件之前将每个文件备份为 filename.ext.orig,并将拒绝的 hunk 保存在 filename.ext.rej 中。 .丢弃 .orig 文件并手动应用 .rej 中留下的更改。对于小补丁来说,这是一个简单的策略。

关于git - 在 git 中应用补丁时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13190679/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com