【问题标题】:Cherry picking changes to specific files from a range of commits从一系列提交中挑选对特定文件的更改
【发布时间】:2015-09-01 17:01:53
【问题描述】:

我有一个分支,很久以前我不小心将其他人的更改合并到其中,现在在拉取请求中显示了数百个不属于我的文件。

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

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

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

【问题讨论】:

    标签: git cherry-pick


    【解决方案1】:

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

    现在,如果您想要做的只是包含那些已触及特定文件集的提交,您可能需要查看this page 底部给出的使用git rev-list 的示例将涉及特定文件规范的所有提交的列表提供给cherry-pick。因此,例如,如果您的所有文件都在 mydir 中,那么 like git rev-list --reverse master -- mydir | git cherry-pick --stdin 应该这样做。

    【讨论】:

      【解决方案2】:

      如果有一个你曾经合并的提交,你可以避免,然后使用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 命令,您可以重置每棵树不想触碰的部分。

      【讨论】:

        猜你喜欢
        • 2014-07-19
        • 1970-01-01
        • 2020-02-14
        • 1970-01-01
        • 2011-07-16
        • 1970-01-01
        • 1970-01-01
        • 2020-12-11
        • 1970-01-01
        相关资源
        最近更新 更多