我需要将功能B从功能A的分支中分离出来。所有B提交都在同一子目录中,但许多提交包括A&乙
使用git filter-branch --subdirectory-filter将子目录移动到新的REPO中,这是我目前的思路。
答案 0 :(得分:0)
您想看看git subtree
。
这将允许你做你想做的事。
尝试:
git subtree split -P <subdirectory of feature B> -b <new feat B branch name>
在上述命令之前,此新分支名称不应存在。
答案 1 :(得分:0)
不,你不想要git filter-branch --subdirectory-filter
,因为你仍然留在同一个回购中。
我只会将git rebase -i
与exec
脚本一起使用,该脚本会重置目录B中未进行的所有更改(如果有足够的话,可以手动执行)。
请注意,这仍然会留下一个脏,除非您也将其重新定义(如果需要,则在B之上,否则在分支点之上)。
答案 2 :(得分:0)
如果我理解得很好,这应该可以解决问题:
# --- Switch to a new branch
$ git checkout -b feature-b
# --- Get the changes in a specific dir from the feature-a branch
$ git checkout feature-a -- dir/featureB
$ git commit -m"FeatureB from feature-a"
# --- Go back to feature-a and forget about dir/featureB
# --- Note that you need to find oldref
$ git checkout feature-a
$ git reset oldref -- ./dir/featureB
这种方法的一点是你实际上并没有移动提交而只是结果。如果您真的关心历史记录,请转到基于rebase
或cheery-pick
的解决方案。