如何合并来自其他git存储库的部分更改

时间:2012-07-23 10:56:12

标签: git

我有一个带有Android内核v3.0.36的git存储库。 但是现在,Linux 3.0.38已经发布了。 Android和主线Linux是不兼容的,所以我只想从3.0.37和3.0.38(只是一小部分更改)中获取更改。而且我不想引起其他变化。

我正在使用Github。我看到很多人的日志都是这样的:

net:wireless:bcm4329:修复未知转义'%' 90fcf01d79浏览代码 Choi,Jong-Hwan在8个月前撰写  xxx在3个月前提交

他们怎么做?我怎么能这样做?

2 个答案:

答案 0 :(得分:3)

您可以获取存储库中的其他分支,并挑选您需要的提交。请参阅git cherry-pick,或git show --pretty=email <commit-id> |git am -3,甚至git format-patch -o /tmp v3.0.37..v3.0.38,然后git am -3 /tmp/<file>了解有趣且可能已修改的补丁

答案 1 :(得分:1)

与“Create a single patch between two tags with multiple commits between them”一样,您可以在v3.0.36之间创建单个路径。和3.0.38,在一个仓库中指定您感兴趣的子目录。

git diff tag1 tag2 -- /path/to/subdir > the-patch.diff

这个想法是,你可以将差异应用于另一个回购。

关于GitHub,相同的机制适用于pull requests:一旦你在本地修补,你可以推送到我们的GitHub仓库,它应该是 fork ,然后制作拉请求。


作为fork0条评论,git diff会丢失与提交相关的评论 git format-patch是一个更好的解决方案(我赞成fork answer) 只有在您了解its limitation时才会考虑cherry-pick


由于commit like this one是由gregkh完成的拉取请求的结果,由edoko接受。