补丁如何在Git中运行?

时间:2010-01-17 19:30:35

标签: git patch

我是Git的新手,但熟悉SVN。作为测试,我使用git init在本地目录中创建了一个存储库。然后我将空的存储库(通过SSH使用127.0.0.1,这是我想测试的另一件事)克隆到另一个本地目录。我在存储库2中添加了一些文件,我做了git add *,最后是git commit -a -m "First source code"

我现在想要使用git format-patch创建补丁并将其应用于存储库1.我该怎么做?我知道有一本手册,但这些东西非常复杂,让我想对我的显示器做某些事情。

6 个答案:

答案 0 :(得分:20)

通过以下方式创建补丁:

$ git format-patch master --stdout > patch.diff

然后patch.diff将包含diff,然后您可以使用以下命令将其发送给其他人:

$ git am < patch.diff

有时,当手册有点密集时,寻找教程是有意义的:

http://luhman.org/blog/2009/09/22/git-patch-tutorial

答案 1 :(得分:14)

从上次提交(或最后几次提交)创建补丁的最简单方法是使用format-patch,其中负数表示为以下内容创建补丁的提交次数:

git format-patch -1

您将获得一个以提交描述命名的补丁文件。使用am将其插入另一个存储库:

git am << name_of_patch_file

答案 2 :(得分:2)

使用GitHub补丁

  1. .patch添加到提交URL以获取补丁文件,例如

    github.com/git/git/commit/b6b3b6a.patch

  2. 像这样修补原始文件:

    git am /tmp/b6b3b6a.patch
    
  3. 使用GitHub diff

    1. .diff添加到提交URL以获取补丁文件,例如

      github.com/git/git/commit/b6b3b6a.diff

    2. 像这样修补原始文件:

      git apply -p0 /tmp/b6b3b6a.diff
      
    3. §5.3 Distributed Git - Maintaining a Project

答案 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 bf8e65bcommit a92331dcommit 46273dfDenton 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>

git config documentation现在包括:

format.coverFromDescription:
     

格式补丁程序的默认模式,用于确定使用分支的说明填充求职信的哪些部分。

还有git format-patch

--cover-from-description=<mode>:
     

控制使用分支的说明自动填充求职信的哪些部分。

     
      
  • 如果<mode>messagedefault,则求职信主题将填充占位符文本。
      求职信的正文将填充分支的描述。当未指定配置或命令行选项时,这是默认模式。

  •   
  • 如果<mode>subject,则分支描述的第一段将填充求职信主题。
      其余说明将填充求职信的正文。

  •   
  • 如果<mode>auto,则分支描述的第一段大于100字节,则模式为message,否则为subject将被使用。

  •   
  • 如果<mode>none,则求职信主题和正文都将填充占位符文本。

  •