如何使用git 生成patch
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用git 生成patch相关的知识,希望对你有一定的参考价值。
1,下载代码git clone git://git.kernel.org/pub/scm/linux/kernel/git/padovan/bluetooth-next-2.6.git
cd bluetooth-next-2.6
2,修改代码
vi drivers/bluetooth/btusb.c
3,把代码添加到git管理仓库
git add drivers/bluetooth/btusb.c
4,提交修改
git commit -m "Added atheros3012 Chip Firmware download support"
5,查看日志
git log <== to git the previous commit hash code.
6,生成patch
git format-patch -s 1bbe3c8c197a35f79bfddaba099270a2e54ea9c7
please replace the hash code with your repo previous commit.
then you can find the patch under repo directory.
then mail your patch to configuration admin.
或者使用
git format-patch HEAD^ <==最近的1次commit的patch
git format-patch HEAD^^ <==最近的2次commit的patch
git format-patch HEAD^ <==最近的3次commit的patch
git format-patch HEAD^ <==最近的4次commit的patch
git format-patch HEAD^^^^^ <==不支持!!!!error!!!
7,退回去
git reset --hard 1bbe3c8c197a35f79bfddaba099270a2e54ea9c7
8.将补丁打上去。
patch -p1 < 0001-Added-liuxingde-test.patch
注: 0001-Added-liuxingde-test.patch为想要打的补丁的名字。运行该命令需在git项目的要目录下。 参考技术A git diff -p hash1 hash2,可以生成两个hash之间的patch了
如何应用使用 git format-patch 生成的补丁?
【中文标题】如何应用使用 git format-patch 生成的补丁?【英文标题】:How to apply a patch generated with git format-patch? 【发布时间】:2011-01-16 00:44:13 【问题描述】:我有两个本地 git 存储库,都指向 same 远程存储库。
在一个 git 存储库中,如果我执行git format-patch 1
,我如何将该补丁应用到另一个存储库?
【问题讨论】:
【参考方案1】:注意:你可以先预览一下你的补丁会做什么:
首先是统计数据:
git apply --stat a_file.patch
然后进行试运行以检测错误:
git apply --check a_file.patch
最后,您可以使用 git am
将补丁应用为提交。这也允许您sign off 应用的补丁。
这对以后的参考很有用。
git am --signoff < a_file.patch
查看example in this article:
在你的 git 日志中,你会发现提交消息包含一个“Signed-off-by”标签。 Github 和其他人将读取此标签,以提供有关提交如何在代码中结束的有用信息。
【讨论】:
自我说明:第 200 个最佳答案金徽章。git am < somepatch.patch
产生“致命:不允许空标识名称(对于 )”。谁能给我解释一下为什么?
@gromit190 表示补丁中有错误的 Author
标头,和/或您没有 git config user.name,email
。
好的; git apply --check
表示 patch does not apply
,git apply -3
表示 repository lacks the necessary blob to fall back on 3-way merge.
在 git 中,rebase 提交是如此轻而易举;但是人们如何在更新的代码之上重新定位他们的补丁?
@ulidtko 也许是***.com/a/15375869/6309 ?【参考方案2】:
git apply name-of-file.patch
【讨论】:
这可能没有回答最初的详细问题,但它回答了标题中的问题,这就是我出现在这个页面上的原因。谢谢! 我知道这是一个古老的问题和答案......但我认为这可能有助于某些人理解difference between git apply and git am。 git apply "[...文件的完整路径...]/name-of-file.patch"【参考方案3】:或者,如果你是老派:
cd /path/to/other/repository
patch -p1 < 0001-whatever.patch
【讨论】:
请注意:这不会创建提交,因此会丢失提交消息和作者信息。 我遇到过一些情况,git apply
不起作用,不知道为什么
如果您尝试将补丁应用到 Git 忽略的路径或文件并且您有 Git 格式的补丁,这将非常有用。【参考方案4】:
首先你应该记下git am
和git apply
之间的difference
当您使用git am
时,您通常想要应用许多补丁。因此应该使用:
git am *.patch
或者只是:
git am
Git 会自动查找补丁并按顺序应用它们;-)
UPDHere你可以找到如何生成这样的补丁
【讨论】:
这种对差异的解释帮助我使用git apply
.. 和--reverse
:-) ?【参考方案5】:
如果您想将其应用为作为提交,请使用git am。
【讨论】:
您通常如何首先获取 mbox 文件? 或者直接使用git apply
@Sebi2020 : git apply
将更改应用为补丁,而不是提交,而git am
假定电子邮件的文本是提交消息(有一些例外)并应用更改创建提交(它可以尝试通过与git am --3way
进行三向合并来解决冲突。
我无法让git am
工作。它在中间停止应用更改并且生成的提交不完整
@KansaiRobot :应用更改时可能存在内容冲突,但您的评论中没有足够的信息;请将问题作为问题发布,尽可能详细。【参考方案6】:
如果您使用的是 JetBrains IDE(如 IntelliJ IDEA、Android Studio、PyCharm),您可以将补丁文件拖放到 IDE 中,然后会出现一个对话框,显示补丁的内容。您现在所要做的就是点击“Apply patch”,然后就会创建一个提交。
【讨论】:
谢谢。这对每个人都非常有用。有一个公认的答案。但这也很有用。 @ambarox 但是这个答案被否决了一次,我不知道为什么 可能有人认为应用补丁的唯一方法是通过命令行。 :D 我给了你一个赞成票。干杯伙伴。 @LasithaBenaragama - 有点像。 SO 不仅是为了帮助 OP,而且是为了帮助所有跟随的人。这个答案(虽然有用)没有提供一般的解决方案。这将是一篇很棒的小博客文章,但不是一个“很好”的答案。会解释否决票!以上是关于如何使用git 生成patch的主要内容,如果未能解决你的问题,请参考以下文章