Git 分支筛选所选文件

Git branch filter selected files

我有一个分支的一些提交,想创建到另一个分支,但只针对某些文件。

让我们

git checkout mybranch

master 切换到 mybranch 并且已经存在一些将更改应用到不同文件的提交。

现在我想创建一个分支,我可以在其中看到类似的提交,但这次只更改了我选择的文件。我该怎么做?

我的想法是获取每个提交并为每个提交创建第二个提交,其中显示选定的文件更改。但这可能会导致大量手动工作,具体取决于您有多少次提交。我也怀疑这些以后可以很容易地合并。

仅合并所选文件的更改的最佳方法是什么?有可能吗?

What is the best way to merge only changes of selected files? Is it even possible?

在你的第二个分支中,你所要做的就是仅为那些文件创建更改(并提交所述更改)。
即使您的第二个分支将拥有所有文件,当您将其合并回 master 时,只会合并您修改和提交的文件。

您可以使用 git filter-branch 重写您的分支的一部分。

在你的情况下,你可以使用 --index-filter :

# create a copy of your branch :
git branch extracted mybranch
git checkout extracted

# all flavors of git filter-branch basically take a script to apply on each commit
git filter-branch --index-filter 'git reset HEAD && git add [the files you want]'
    master..extracted

您还可以查看 git-filter-repo

等工具