Git:修改无关回购中的更改

时间:2012-08-21 15:50:04

标签: git merge diff patch

让我用一个例子来解释这个问题:

我在我的旧项目仓库工作OlDRepo/libs/graphics

我对图形进行了一些更改并做了很多提交。

现在,我开始使用新版本的图形

的新项目

NewRepo/Dir1/libs/graphics

我想将旧图形目录所做的所有更改带到新项目中 (请注意路径中的Dir1)

我可以执行简单的git diffdiff,但我想维护单个提交。

我该如何做到这一点?

编辑:我怀疑我的问题对任何人都没有意义(除了我!)。让我再试一次真正的问题。

我用cocos2d-iphone 1.1版开始了一个iphone项目。 它来自xcode模板,它创建了一个带有新repo的全新项目,初始提交包含cocos2d-iphone 1.1版(注意:它的来源)

我继续开发我的项目...提交,提交... [添加新文件] 在某些时候,我不喜欢cocos2d-iphone 1.1版中的内容。我直接改变了源代码(可能我不应该)。并自豪地提交.. [改进的Cocos2d-ccnode] 。再次提交.. [改进的Cocos2d-ccsprite]

最后发布了应用程序。

现在,我想开发一个新项目,我查了一下,cocos2d-iphone版本2.0可用。 我安装了新的项目模板(使用cocos2d-iphone 2.0版)。

从模板创建新项目;再次使用包含cocos2d-iphone版本2.0的初始提交的新repo的全新项目

请注意,cocos2d-iphone版本2.0不是1.1的完整重写,但包含很小的更改。

现在我记得我对cocos2d-iphone 1.1版的改进(!)。我想将这些更改应用于新项目。绝对不是一次提交。

1 个答案:

答案 0 :(得分:0)

我建议:

  cocos1.1        cocos2.0 (you work on this right now)
    \        
     \    
    changes

这就是你拥有的,对吧?那么你想要的是选择你在cocos1.1上做出的确切更改并将其应用到cocos2.0?我的建议是git cherry-pick你的更改。

你也可以改变,但我不确定它是否会起作用,因为cocos2.0似乎没有直接链接到cocos1.1(你也可以尝试这种方式)

顺便说一句,我认为cocos1.1和2.0不是同一个本地回购。因此,您应首先将cocos1.1添加为远程:在cocos2.0中,运行git remote add cocos1.1 path/to/cocos1.1。然后是git branch --track cocos1.1changes cocos1.1/desiredbranch

所以你计算了你的提交列表,比如说c1到c20(你需要使用他们的SHA-1哈希)。他们在cocos1.1changes分支。

您要做的是git checkout cocos2.0在正确的分支上工作,然后应用您的提交。您可以从简单的git cherry-pick c1开始(c1是SHA-1哈希)

我认为有类似git cherry-pick c1~c20或类似的技巧,但无论如何得到一些关于挑选樱桃的信息,我认为这就是你需要的。

祝你好运