好的,从标题中可能很难理解。基本上我有一个Wordpress插件,我想对插件的完整版和精简版使用相同的存储库。我从Stackoverflow上的a great post about this topic获得了这个好主意。
这个想法是你有一个lite版本的分支,它删除了文件/代码。每次更新主分支时,您都需要" rebase" lite分支,然后基本上接受主分支中的所有更改并将它们插入到lite分支下 - 就像lite分支再次在其上重新应用所有删除一样。
从概念上讲,我至少模糊地理解它......但我不知道如何实现它。这是一些插图。我们说我有两个分支:
我想把主人的所有最新更改都插入"""精简分支,就像这样(虽然我有一个预感,但我的图表错误地描述了它实际发生的方式)。
如果有人可以,我会喜欢它:
另外,我过去通过CLI使用git,但现在使用的是Sourcetree。我对任何CLI的答案都很好,但是如果您碰巧有Sourcetree特定的答案,那么也欢迎这些答案!
答案 0 :(得分:3)
实际上,您的图表看起来很好,您可以从CLI执行此操作:
$ git checkout lite
$ git rebase
假设您告诉git将master
设置为lite
的“上游”。
如果您尚未完成此上游设置,您可以执行此操作,或使用rebase
命令的一个额外字来指定上游:
$ git rebase master
rebase的作用是什么:
复制当前分支上但不在上游的每个提交 - 这是第一个图中的两个紫色提交 - 每个副本由以下内容完成:
复制完所有提交后,将分支标签从原始分支上剪下,并使其指向新的最常复制的提交。
如果我们忽略一些角落和特殊情况,这就是整个事情。具体来说,git将检测正在重新分支的分支中的变化(差异块)是否已经在上游,并且在适当时省略更改甚至整个提交;有时git将无法应用差异并将停止并需要帮助(就像git merge
);在非常罕见的情况下,git将会应用diff,并将它放在错误的位置,产生一个糟糕的“副本”(也就像git merge
一样 - 实际上,rebase可以完成3路如果需要,为每个提交的提交合并。
与合并一样,你应该检查结果,以防git“重新应用以前的更改”错误。
答案 1 :(得分:0)
如果我正确理解您的问题,您所描述的是标准的rebase工作流程。修改lite
分支上的master
分支:
更新主分支,如果它尚未更新:
git checkout master
git pull
切换回lite
分支:
git checkout lite
主分支上的重新启动:
git rebase master
现在你完全按照你的第二张照片描述了。此时,如果您进行的更改与在主分支上所做的更改冲突,则可能需要解决某些合并冲突。 GitHub有一些关于如何解决合并冲突的好信息here。