git am PATCH 失败的处理方法

转载 2016年06月01日 17:01:59

参考:http://www.cnblogs.com/domainfei/articles/2433504.html

http://blog.sina.com.cn/s/blog_5372b1a301015y0n.html

英文原文地址:http://www.pizzhacks.com/bugdrome/2011/10/deal-with-git-am-failures/


比如,一个典型的git am失败,可能是这样的:
$ git am PATCH
Applying: PACTH DESCRIPTION
error: patch failed: file.c:137
error: file.c: patch does not apply
error: patch failed: Makefile:24
error: libavfilter/Makefile: patch does not apply
Patch failed at 0001 PATCH DESCRIPTION
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只是输出上述信息,然后就停下来。一个小冲突会导致整个patch都不会被集成。

处理这种问题的最简单方法是先使用 git am --abort,然后手动的添加此patch, patch -p1 < PATCH,手动解决掉代码冲突,最后使用 git commit -a 提交代码。但是这样做有个问题就是你会失去PATCH中原本包含的commit信息(比如From,Date,Subject,Signed-off-by等)。应该有一种更聪明的方法。

在 .git/rebase-apply 目录下,存放着相应的补丁文件,名字是“0001” (在更新的git版本中,存放补丁文件的目录名有所改变,这里使用的git版本是 1.7.4.1)。

事实上,你可以使用 git apply 命令打patch(git apply 是git中的patch命令)。如同使用 patch -p1 命令时一样,然后手动解决代码冲突(检视生成的 .rej 文件,与冲突文件比较,修改冲突内容,并最终把文件加入到index中):

$ git apply PATCH --reject
$ edit edit edit
(译注:根据.rej文件手动解决所有冲突)
$ git add FIXED_FILES
$ git am --resolved

就这么简单!
想多一些解释,好吧。git am 并不改变index,你需要使用 git apply --reject 打patch(保存在 .git/rebase-apply),手动解决代码冲突,(译注:使用 git status 列出所有涉及文件),把所有文件(不仅仅是引起冲突的文件)添加到(git add)index,最后告诉 git am 你已经解决(--resolved)了问题。这样做的好处是你不需要重新编辑commit信息。而且,如果你正在打的是一系列patch(就是说你在打的是多个patch,比如 git am *.patch)你不需要使用 git am --abort,然后又 git am。

Git am PATCH冲突解决

本文通过实例记录使用`git am PATCH`打patch过程中遇到的一次冲突问题和解决过程。使用本文中的方法可以保留patch中commit信息,比较推荐。...
  • liangchen0322
  • liangchen0322
  • 2016年04月20日 23:49
  • 2349

如何打patch 及git 打patch 失败的处理方法

最近分配了一些打patch的任务。打的那个叫稀巴烂。想必对我很失望。这个过程中学到了如何打patch. 正常来说我们打的git生成的标准patch如果没有没有问题那很好打。 只需要进入patch对应的...
  • RonnyJiang
  • RonnyJiang
  • 2017年01月11日 15:46
  • 2860

Git am 合并 patch 时的冲突处理

期间有时会遇到合并冲突,正常的原因一般是未及时下载新版本产生了冲突,特殊一点的原因是手工修改 patch 内容导致的。有时候看注释写得不够准确,忍不住就改了,有时候是 Geany 保存时自动去除了 p...
  • chaihuasong
  • chaihuasong
  • 2016年01月14日 14:47
  • 2399

git am PATCH 失败的处理方法

比如,一个典型的git am失败,可能是这样的: $ git am PATCH Applying: PACTH DESCRIPTION error: patch failed: fi...
  • pkufergus
  • pkufergus
  • 2014年01月06日 19:16
  • 867

git am patch 失败的处理方法

参考:http://www.cnblogs.com/domainfei/articles/2433504.html http://blog.sina.com.cn/s/blog_5372b1a3010...
  • hohaixrh
  • hohaixrh
  • 2013年12月27日 18:47
  • 930

git am PATCH 失败的处理方法

参考:http://www.cnblogs.com/domainfei/articles/2433504.html http://blog.sina.com.cn/s/blog_5372b1a301...
  • sunnylgz
  • sunnylgz
  • 2012年06月13日 18:52
  • 29813

git am PATCH 失败的处理方法

参考:http://www.cnblogs.com/domainfei/articles/2433504.html http://blog.sina.com.cn/s/blog_5372b1a301...
  • cnisme
  • cnisme
  • 2014年04月09日 19:38
  • 582

git am PATCH

patch
  • Solei_sun
  • Solei_sun
  • 2016年09月23日 11:00
  • 102

git-am合并git format-patch

使用git-am合并git format-patch生成的一系列的patch 2011-11-18 09:32:58 分类: LINUX 这篇文章主要介绍一下g...
  • tangkegagalikaiwu
  • tangkegagalikaiwu
  • 2013年01月24日 13:21
  • 511

git am, git apply, git format-patch,git diff 用法

传统的patch可能会丢失一些信息,git 提供两种打patch方法, git diff , git format-patch,两种的区别在于前者打出来的patch中不带有提交信息, 后者打出来的...
  • woai110120130
  • woai110120130
  • 2016年12月15日 11:52
  • 269
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:git am PATCH 失败的处理方法
举报原因:
原因补充:

(最多只允许输入30个字)