Cherry挑选更改为一系列提交中的特定文件

时间:2015-06-16 18:08:42

标签: git cherry-pick

我有一个分支,很久以前我意外地合并了其他人的变化,现在有数百个文件出现在拉取请求中,而不是我的。

我想创建一个单独的分支,我想在这几十个提交中挑选自己的文件,这样我的新拉取请求只包含我的更改。

我发现了如何挑选提交,以及如何从一个特定的提交中挑选文件,但如何从一系列提交中挑选几个文件

是否有更简单的解决方案?

2 个答案:

答案 0 :(得分:1)

因此,如果我理解正确,首先要做的就是挑选范围,即git cherry-pick --no-commit。然后,使用git reset删除对索引的更改。然后git add要提交的所有文件,git commit这些文件,最后git checkout .以消除其他本地更改。这将导致包含您的更改的单个扁平提交。

现在,如果您想要做的只是包含那些触及特定文件集的提交,您可能需要查看使用{this page底部的示例。 1}}将已触及特定文件规范的所有提交的列表提供给git rev-list。因此,例如,如果您的所有文件都在cherry-pick中, {/ em> mydir之类的内容就应该这样做。

答案 1 :(得分:0)

如果您曾经合并过一次提交,那么您可以避免,然后使用git rebase跳过合并提交。

-----origin/foo-------A----------------------------B----C----D
                      (where you merged in)        (commits on top of that)

  AFTER REBASE

-----origin/foo-------B'----C'----D'
                      (your commits, skipping A)

如果您的更改(上面的BCD)确实触及了您要避免的文件,则需要使用git filter-branch重写这些提交并避免更改这些文件。使用--tree-filter命令,您可以重置您不想触摸的每棵树的部分。