【发布时间】:2012-10-22 20:14:31
【问题描述】:
我有一个浅克隆,我在上面做了三个提交。
这是日志:
$ git log --oneline --graph --decorate --all
* d3456fd (HEAD, master) 补丁 3
* 9713822 补丁 2
* 6f380a6 补丁 1
* 来自完整克隆的 8a1ce1e (origin/master, origin/HEAD)
* 7c13416 从浅层添加
* 3b3ed39 已删除电子邮件
* cfbed6c 进一步修改
* 为 2.1 版添加了 a71254b
* 第 2 版的 7347896(嫁接)更改
现在我从这里创建一个补丁:
$ git format-patch -k --stdout origin > ../format_since_origin.patch
我想将此补丁应用到另一个克隆中,这是一个完整的克隆。
这是日志:
$ git log --oneline --graph --decorate --all
* 8a1ce1e (HEAD, origin/master, master) 来自完整克隆
* 7c13416 从浅层添加
* 3b3ed39 已删除电子邮件
* cfbed6c 进一步修改
* 为 2.1 版添加了 a71254b
* 第 2 版的 7347896 处更改
* b1a8797 对 ttwo 文件的更改
* 603710c 更改测试报告
* 16b20b3 添加了 test_report.txt
* f0871ea 修改了 file1.xml
* dd94bfc 添加了 file1.xml
* 00758aa 第二次提交
* 49f9968 第一次提交
我无法应用从上面的浅克隆创建的补丁。我收到以下错误。
$ git am -3 /c/temp/git/format_since_origin.patch
应用:补丁 1
使用索引信息重建基础树...
错误:补丁失败:file1.c:6
错误:file1.c:补丁不适用
您是否手动编辑了您的补丁?
它不适用于记录在其索引中的 blob。
无法回退到三向合并。
补丁在 0001 补丁 1 失败
解决此问题后,运行“git am --resolved”。
如果您希望跳过此补丁,请运行“git am --skip”。
要恢复原始分支并停止修补,请运行“git am --abort”。
知道为什么这个补丁失败了吗?还是我的方法完全错误?
更新:
它适用于以下
$ git am -3 --ignore-whitespace /c/temp/git/format_since_origin.patch 应用:补丁 1 应用:补丁 2 应用:补丁 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:尾随空格。
file1.c 的补丁更改
c:/temp/git/dif_origin.patch:18:尾随空格。
修补这个 xml 家伙
c:/temp/git/dif_origin.patch:29:尾随空格。
fsdfsd
c:/temp/git/dif_origin.patch:30:尾随空格。
修补此报告
错误:补丁失败:file1.c:6
错误:file1.c:补丁不适用
错误:补丁失败:file1.xml:2
错误:file1.xml:补丁不适用
错误:补丁失败:tr/test_report.txt:2
错误:tr/test_report.txt:补丁不适用
【问题讨论】:
-
有理由不使用
git bundle甚至git diff/git apply吗? -
@charles,我在使用 git diff 和应用时遇到错误。我已在原始帖子中添加了错误详细信息。我创建的差异是错误的吗?
标签: git