我有两个本地Git代码库,都指向同一个远程代码库。
如果我在其中一个Git代码库中运行git format-patch 1
命令,如何将该补丁应用到另一个代码库中呢?
git apply --stat a_file.patch
然后进行干运行以检测错误:
git apply --check a_file.patch
最后,您可以使用git am
将您的补丁作为提交应用。这还允许您签署已应用的补丁。
这对于以后的参考可能会很有用。
git am --keep-cr --signoff < a_file.patch
正如riverofwind在评论中所指出的:
如果你在 Windows 下仅进行开发,且
autocrlf=false
,则需要传递--keep-cr
给am
命令以保留那些 CRLF。
参考这篇文章中的示例:
在你的 Git 日志中,你会发现提交消息包含一个 “Signed-off-by” 标签。Github 和其他人将读取此标签以提供关于提交如何进入代码中的有用信息。
git apply name-of-file.patch
或者,如果你更喜欢老派的方式:
cd /path/to/other/repository
patch -p1 < 0001-whatever.patch
git apply
无法工作时,这种方法可以解决,不确定原因是什么。 - Sean Breckenridge首先你应该注意一下 git am 和 git apply 的区别
当你使用 git am 时,通常希望应用多个补丁。因此,应该使用:
git am *.patch
或者只需:
git am
Git会自动查找补丁并按顺序应用它们 ;-)
更新
在这里,您可以找到如何生成此类补丁的方法
git apply
.. 还有 --reverse
:-) - Jordan Geegit apply
。 - Sebi2020git apply
将更改应用为补丁,而不是提交,而git am
则假定电子邮件的文本是提交消息(有一些例外情况),并应用更改创建提交(它可以尝试使用git am --3way
进行三方合并解决冲突)。 - Jakub Narębskigit am
正常工作。它在应用更改的过程中停止了,生成的提交不完整。 - KansaiRobot另一种方法是将本地存储库之一添加为另一个存储库的远程存储库。
$ cd repo1
$ git remote add repo2 file:///path/to/repo2/.git
这样你就可以从一个本地仓库获取分支、将本地分支变基或者把提交的更改从一个本地仓库cherry-pick到另一个仓库中。
$ git remote update repo2
$ git fetch repo2 branch:branch-from-repo2
$ git log branch-from-repo2
git am < somepatch.patch
时会出现“fatal: empty ident name (for <>) not allowed”错误? - birgerspgit config user.{name,email}
。 - ulidtkogit apply --check
显示patch does not apply
,而git apply -3
则显示repository lacks the necessary blob to fall back on 3-way merge.
在 git 中,重新定位提交非常容易;但是人们如何在更新的代码上重新定位他们的补丁呢? - ulidtko