git init
在本地目录中创建了一个仓库。然后,我使用SSH(127.0.0.1)在另一个本地目录中克隆了空仓库(这也是我想要测试的另一件事)。我在仓库2中添加了一些文件,然后运行了git add *
,最后运行了git commit -a -m "First source code"
。现在,我想用
git format-patch
创建一个补丁,并将其应用于仓库1。我该怎么做?我知道有一个手册,但这些东西非常复杂,让我想对我的显示器做某些事情。git init
在本地目录中创建了一个仓库。然后,我使用SSH(127.0.0.1)在另一个本地目录中克隆了空仓库(这也是我想要测试的另一件事)。我在仓库2中添加了一些文件,然后运行了git add *
,最后运行了git commit -a -m "First source code"
。git format-patch
创建一个补丁,并将其应用于仓库1。我该怎么做?我知道有一个手册,但这些东西非常复杂,让我想对我的显示器做某些事情。通过以下方式创建您的补丁:
$ git format-patch master --stdout > patch.diff
然后 patch.diff 将包含差异,您可以将其发送给其他人使用以下方法应用:
$ git am < patch.diff
有时候,当手册有点复杂的时候,寻找教程是很有意义的:
http://luhman.org/blog/2009/09/22/git-patch-tutorial从最后一个提交(或最近几个提交)创建补丁的最简单方法是使用format-patch
命令,使用负数来指定要为其创建补丁的提交数量:
git format-patch -1
你将会得到一个以提交描述命名的补丁文件。使用 am
命令将其插入到另一个仓库中:
git am << name_of_patch_file
git format-patch origin/master..
等等(请参阅 git rev-parse 手册以了解所有表达这些参数的方式)。 - Matt Enrightgit am name_of_patch_file
。 - Anton Krouglov使用GitHub补丁
Add .patch
to a commit URL to get the patch file, example
Patch the original file like this:
git am /tmp/b6b3b6a.patch
使用GitHub差异
Add .diff
to a commit URL to get the patch file, example
Patch the original file like this:
git apply -p0 /tmp/b6b3b6a.diff
如果您正在使用Git,正确而简单的方法是通过远程操作:
cd \path\to\repo1
git remote add otherrepo \path\to\repo2
git fetch otherrepo
git log otherrepo/master ## Find the commit you want to steal in the list
git cherry-pick SOME_SHA1 ## Snag just one commit
git merge otherrepo/master ## Merge all of the new commits from otherrepo/master
随着 Git 2.25(2020 年第一季度)的到来,git format-patch
得以进化,更好地使用分支描述("git branch --edit-description
")作为主题。
请查看提交 bf8e65b, 提交 a92331d, 提交 46273df (2019年10月15日) 由Denton Liu (Denton-L
)完成。
(由Junio C Hamano -- gitster
--合并于提交 b75ba9b, 2019年11月10日)
format-patch
:教授--cover-from-description
选项签名:Denton Liu
以前,当
format-patch
生成一封封面信时,只有正文会被填充为分支的描述,而主题则会被填充为占位符文本。然而,用户可能希望以同样的方式自动填充封面信的主题。
教授
format-patch
接受--cover-from-description
选项和相应的format.coverFromDescription
配置,允许用户填充封面信的不同部分(现在包括主题)。
git config
文档 现在包括:
format.coverFromDescription
:用于确定在格式化补丁时使用分支说明填充封面信的默认模式。
还有git format-patch
命令:
--cover-from-description=<mode>
:控制自动填充求职信的哪些部分将使用分支描述。
如果 <mode>
是 message
或 default
,则求职信主题将填充占位符文本。
求职信正文将填充分支的描述。当未指定配置或命令行选项时,这是默认模式。
如果 <mode>
是 subject
,则分支描述的第一段将填充求职信主题。
其余描述将填充求职信正文。
如果 <mode>
是 auto
,如果分支描述的第一段大于100字节,则使用 message
模式,否则使用 subject
模式。
如果 <mode>
是 none
,则求职信主题和正文都将填充占位符文本。
在求职信上,Git 2.37(2022年第三季度)解释道:
请查看提交4ec5008,提交c2cd4b5,提交e97d474,提交afc8c92,提交489ef3b(2022年5月12日)由Philippe Blain (phil-blain
)完成。
(由Junio C Hamano -- gitster
--于提交3ce9483合并,日期为2022年5月25日)
MyFirstContribution
:在封面信上添加独立部分签署者:Philippe Blain
“使用
git send-email
(man)/准备邮件”部分包含了关于封面信目的的说明,但是“通过GitGitGadget发送补丁”部分缺少这一内容。在“入门指南:补丁系列结构”标题下添加一个独立的“封面信”部分,解释封面信的用途,并起草教程中使用的“psuh”主题的封面信。
注:这里的“psuh”来自于:
在本教程中,我们将添加一个新命令,+git push
+,简称为“Pony Saying 'Um, Hello
”,这是一个功能,尽管在用户的日常工作流程中频繁调用,但一直未被实现。
MyFirstContribution
现在包括在其手册页面中:你需要前往“存储库2”,也就是你想要从中创建补丁的存储库,并运行git-format-patch命令来创建补丁: git format-patch master --stdout > 补丁文件名
然后你需要进入“存储库1”,也就是你想要应用补丁的存储库: git apply 补丁文件名
有时候,仅仅检查一下补丁是否会引起问题也是很有用的: git apply --check 补丁文件名