单个文件的格式化补丁

41

我有一个名为test_module.c的文件,其中包含一些差异,我希望将这些差异应用于我的本地工作副本。

我尝试从远程创建补丁文件,方法如下。然而,Git没有报告任何错误,也没有创建任何补丁文件。

git format-patch master/dev_branch test/test_module.c

我能否创建一个单个文件的补丁并将其应用?

(使用git版本1.7.5.4)

2个回答

47
如果您给git format-patch一个单独的修订版本,它将为自该修订版本以来的每个提交生成补丁。如果您在命令中看不到任何输出,则我怀疑在origin/master和您当前的HEAD之间该文件没有更改。作为一种替代方法,您可以提供一个修订版本范围(例如origin/master~3..origin/master),以覆盖对该文件引入的更改。或者,如果要生成补丁的更改仅包含在origin/master的最新提交中,则可以使用-1参数,如下所示:
git format-patch -1 origin/master test/test_module.c

我用以下命令,其中哈希是最后提交的: git format-patch [hash] origin/master test/test_module.c 然而,我遇到了以下错误。通常是什么导致的呢? error: patch failed: test/test_module.c:176 error: test/test_module.c: patch does not apply 谢谢。 - ant2009
我认为你可能想要使用 git format-patch [hash]..origin/master test_module.c,或者 origin/master 可能被视为一个路径。 - Mark Longair
1
这个在哪里有记录呢?官方手册似乎没有提到可以指定一个文件(虽然确实有效):https://git-scm.com/docs/git-format-patch。 - Ohad Schneider
请注意,-1 参数(表示“给我这个提交以来的更改,而不是从这个提交开始的所有更改”)适用于哈希值,而不仅仅是分支的最新提交。也就是说,您可以使用 git format-patch -1 abc1234 path/to/file 命令。 - duozmo
2
@OhadSchneider,“-1”选项在“git-format-patch”手册中有详细说明:*-<n>从最新的<n>个提交中准备补丁。* - Lekensteyn

19
您可以使用以下语法为单个文件创建补丁:

您可以使用以下语法为单个文件创建补丁:

git format-patch [commit_hash] [file]

它实际上能够工作!所显示的sha1是不正确的,但它确实给我带来了我想要的正确补丁。 - cnst
2
使用双破折号:git format-patch [commit_hash] -- [file] - betontalpfa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接