【问题标题】:git format-patch : how can I get it to ignore already merged commits?git format-patch:我怎样才能让它忽略已经合并的提交?
【发布时间】:2011-12-10 08:33:20
【问题描述】:

我正在处理my copy of the perl repository on github 并创建了一个名为“perl-d-add-tests-2”的分支来进行一些更改,我已经提交了一些提交。我在上游提交了这些提交,并将它们应用于“blead”(主要的 perl 开发分支)。我从上游存储库中提取,并从 blead 执行“git merge”到“perl-d-add-tests-2”,现在我再次尝试在那里运行“git format-patch blead”,发生了什么:

shlomif@telaviv1:~/Download/unpack/perl/p5/git/perl$ git st
# On branch perl-d-add-tests-2
nothing to commit (working directory clean)
shlomif@telaviv1:~/Download/unpack/perl/p5/git/perl$ git diff blead | cat
shlomif@telaviv1:~/Download/unpack/perl/p5/git/perl$ git format-patch blead
0001-Made-c-line_num-working-again.patch
shlomif@telaviv1:~/Download/unpack/perl/p5/git/perl$ 

可以看到,“git format-patch”仍然会生成已经应用的提交。什么鬼?

如何防止“git format-patch”这样做?我只想要独特的更改,以前当它发生时,我被告知要打开另一个分支并从那里“git cherry-pick”提交,但显然这个解决方案无法扩展,因为它会在我的存储库中乱扔分支。

【问题讨论】:

    标签: git merge commit patch


    【解决方案1】:

    一个简单的选项是指定您想要的提交,但不包括旧的、已应用的提交。引用提交的一般语法可以在git help rev-parse 中找到;在这种情况下,例如,说“我当前分支的最后 5 次提交”看起来像

    git format-patch HEAD~5
    

    另一种可能性是将您的perl-d-add-tests-2 功能分支重新定位到当前的blead 分支。 IIRC,您在此分支上的早期工作在应用于 blead 时意外压缩为单个提交,因此在这种情况下,您可能需要进行比预期更多的手动清理。如果您想尝试这种方法,我建议您在一次性分支上进行,这样如果出现问题,您不会失去任何东西。

    # pull in upstream changes:
    git checkout blead
    git pull
    
    # create and switch to a new branch "tmp":
    git checkout -b tmp perl-d-add-tests-2
    
    # rebuild this branch against your current "blead" branch:
    git rebase blead
    

    如果你喜欢结果,你可以使用临时分支代替你的特性分支:

    # delete current feature branch:
    git branch -d perl-d-add-tests-2
    
    # rename the temporary branch back to the feature branch's name
    git branch -m tmp perl-d-add-tests-2
    
    # switch to the recreated feature branch:
    git checkout perl-d-add-tests-2
    
    # generate patches against blead:
    git format-patch blead
    

    请注意,在git rebase blead 步骤中,您还可以使用-i 选项,以交互方式指定要重新应用到blead 的当前提示的提交。这将在重新申请的提交议程上打开您的$EDITOR;如果你走这条路,你可能想明确删除该议程中已应用于上游blead 的提交。

    最后,您说为此创建新分支无法扩展,因为您会在存储库中乱扔不需要的分支。但是,Git 很高兴您可以随时重命名 (git branch -m) 或删除 (git branch -d) 分支。可能导致问题的唯一方法是您下游的其他存储库是否依赖于已删除或重命名的分支。但是对于没有人从中提取并且您计划在准备好后提交上游的本地功能分支的常见情况,没有什么可担心的。因此,如果您觉得挑选樱桃的建议不错,您可以这样做,并删除旧版本的功能分支。

    【讨论】:

      猜你喜欢
      • 2011-12-11
      • 2018-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-27
      • 2021-05-27
      • 1970-01-01
      相关资源
      最近更新 更多