我是Git的新手,但熟悉SVN。作为测试,我使用git init
在本地目录中创建了一个存储库。然后我将空的存储库(通过SSH使用127.0.0.1,这是我想测试的另一件事)克隆到另一个本地目录。我在存储库2中添加了一些文件,我做了git add *
,最后是git commit -a -m "First source code"
。
我现在想要使用git format-patch
创建补丁并将其应用于存储库1.我该怎么做?我知道有一本手册,但这些东西非常复杂,让我想对我的显示器做某些事情。
答案 0 :(得分:20)
通过以下方式创建补丁:
$ git format-patch master --stdout > patch.diff
然后patch.diff将包含diff,然后您可以使用以下命令将其发送给其他人:
$ git am < patch.diff
有时,当手册有点密集时,寻找教程是有意义的:
答案 1 :(得分:14)
从上次提交(或最后几次提交)创建补丁的最简单方法是使用format-patch
,其中负数表示为以下内容创建补丁的提交次数:
git format-patch -1
您将获得一个以提交描述命名的补丁文件。使用am
将其插入另一个存储库:
git am << name_of_patch_file
答案 2 :(得分:2)
使用GitHub补丁
将.patch
添加到提交URL以获取补丁文件,例如
像这样修补原始文件:
git am /tmp/b6b3b6a.patch
使用GitHub diff
将.diff
添加到提交URL以获取补丁文件,例如
像这样修补原始文件:
git apply -p0 /tmp/b6b3b6a.diff
答案 3 :(得分:2)
如果您正在使用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
这会将提交从一个仓库迁移到另一个仓库,包括其作者和提交消息,并将帮助您理清合并冲突(特别是如果您正在移动&gt; 1提交)
答案 4 :(得分:0)
您必须转到要从中创建补丁的“存储库2”,然后运行git-format-patch来创建补丁: git format-patch master --stdout&gt; name_of_patch_file
然后你进入“存储库1”,你想要将补丁应用到: git apply name_of_patch_file
有时检查补丁是否会导致问题是有用的: git apply --check name_of_patch_file
答案 5 :(得分:0)
在Git 2.25(2020年第一季度)中,git format-patch
逐渐发展为更好地将分支描述(“ git branch --edit-description
”)用作主题。
请参见commit bf8e65b的commit a92331d,commit 46273df,Denton Liu (Denton-L
)(2019年10月15日)。
(由Junio C Hamano -- gitster
--在commit b75ba9b中合并,2019年11月10日)
format-patch
:教导--cover-from-description
选项签名人:刘登顿
之前,当
format-patch
生成求职信时,只有正文将填充分支的描述,而主题将填充占位符文本。但是,用户可能希望以相同的方式自动填充求职信的主题。
教授格式补丁以接受
--cover-from-description
选项和相应的format.coverFromDescription
配置,从而允许用户填充求职信的不同部分(现在包括主题)。< / p>
format.coverFromDescription:
格式补丁程序的默认模式,用于确定使用分支的说明填充求职信的哪些部分。
--cover-from-description=<mode>:
控制使用分支的说明自动填充求职信的哪些部分。
如果
<mode>
是message
或default
,则求职信主题将填充占位符文本。
求职信的正文将填充分支的描述。当未指定配置或命令行选项时,这是默认模式。如果
<mode>
是subject
,则分支描述的第一段将填充求职信主题。
其余说明将填充求职信的正文。如果
<mode>
为auto
,则分支描述的第一段大于100字节,则模式为message
,否则为subject
将被使用。如果
<mode>
为none
,则求职信主题和正文都将填充占位符文本。