徐州开发的网站,wordpress目录导航主题,做网站需要申请商标哪些类目,手机网络营销策划方案平时我们在使用git 管理项目的时候#xff0c;会遇到这样一种情况#xff0c;那就是客户使用git 生成patch 给到我们#xff0c;那我们就需要把客户给到patch 打入到我们的project #xff0c;基于这样一个场景#xff0c;我把git 如何生成patch 和如何打入patch 做总结生…平时我们在使用git 管理项目的时候会遇到这样一种情况那就是客户使用git 生成patch 给到我们那我们就需要把客户给到patch 打入到我们的project 基于这样一个场景我把git 如何生成patch 和如何打入patch 做总结生成patch 的方法(我这里描述的生成patch 是根据commit 记录生成的)1.例如首先先通过git log 查看有哪一些commit2.把第一次commit 提交以后的(不包括第一次提交)都生成patch如上图所示使用命令git format-patche795fefabc然后生成的patch 文件如下图所示打入patch 的方法把生成的patch 文件copy 到一个文件夹中来(这里我创建了patch 文件夹)。如下图所示由于这些patch显然是用git format-patch来生成的所以用git的工具应该就可以很好的做好。git am 就是作这件事情。在使用git am之前 你要首先git am --abort 一次来放弃掉以前的am信息这样才可以进行一次全新的am。不然会遇到这样的错误。.git/rebase-apply still exists but mbox given.git am 可以一次合并一个文件或者一个目录下所有的patch如下图所示1 使用git format-patch生成所需要的patch:当前分支所有超前master的提交git format-patch -M master某次提交以后的所有patch:git format-patch 4e16 --4e16指的是commit名从根到指定提交的所有patch:git format-patch --root 4e16某两次提交之间的所有patch:git format-patch 365a..4e16 --365a和4e16分别对应两次提交的名称某次提交(含)之前的几次提交git format-patch –n 07fe --n指patch数07fe对应提交的名称故单次提交即为git format-patch -1 07fegit format-patch生成的补丁文件默认从1开始顺序编号并使用对应提交信息中的第一行作为文件名。如果使用了-- numbered-files选项则文件名只有编号不包含提交信息如果指定了--stdout选项可指定输出位置如当所有patch输出到一个文件可指定-o 2应用patch先检查patch文件git apply --stat newpatch.patch检查能否应用成功git apply --check newpatch.patch打补丁git am --signoff newpatch.patch(使用-s或--signoff选项可以commit信息中加入Signed-off-by信息)如果应用patch出现问题比如一个典型的git am失败可能是这样的$ git am PATCHApplying: PACTH DESCRIPTIONerror: patch failed: file.c:137error: file.c: patch does not applyerror: patch failed: Makefile:24error: libavfilter/Makefile: patch does not applyPatch failed at 0001 PATCH DESCRIPTIONWhen 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信息(比如FromDateSubjectSigned-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 生成patch 和打入patch的文章就介绍到这了,更多相关git 生成patch 和打入patch内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家