将先前的git提交在子目录中移动到新分支

时间:2016-05-24 18:18:49

标签: git

我需要将功能B从功能A的分支中分离出来。所有B提交都在同一子目录中,但许多提交包括A&乙

使用git filter-branch --subdirectory-filter将子目录移动到新的REPO中,这是我目前的思路。

3 个答案:

答案 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 -iexec脚本一起使用,该脚本会重置目录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

这种方法的一点是你实际上并没有移动提交而只是结果。如果您真的关心历史记录,请转到基于rebasecheery-pick的解决方案。