我理解如何在git中合并分支,我喜欢它是多么容易。
我有一个看起来像这样的分支:
project/
|--subproj1/
| |---(files)
|
|--subproj2/
|---(files)
一位同事的分支机构对这两个子项目进行了重大修改。更具体地说,他将两者都改为依赖于新子项中的常见代码。但是,出于各种原因,我们不会在可预见的未来随时推动他的分支。
我的分支仅在subproj1中与master分开,我正在进行子项目特定的增强。我的子项目不如其他一些项目重要,因此对我们可以推动哪些类型的更改的限制较少。我想合并我的同事的subproj1更改(以及这些更改所依赖的新subproj3),但仅保留现有的subproj2。在未来的某个时候,当他将他的项目完全合并到master时,我希望他的subproj2更改为正常合并。
如何使用git执行此操作?
答案 0 :(得分:2)
每次提交都是一个逻辑工作单元。不幸的是,这意味着你不能将你的同事对subproj1和subproj2所做的编辑分开,如果他在同一个分支上进行的那样。
但是,要做你要求的事,你会使用git filter-branch。您可以使用它来创建一个新分支,该分支是通过重放所有同事的提交来定义的,但只是将subproj1的更改添加到每个提交。
命令类似于:
git fetch colleague-repo ...
git filter-branch --subdirectory-filter subproj1 -- A..B
(其中A..B是您从其存储库中提取的提交范围)
通过这样做,您创建了一个独特的分支,其工作与您同事的工作完全分开。如果将此新分支和同事的分支合并为master,则subproj1的更改历史将永久地在两个分支之间分配。