【问题标题】:How do I take a bunch of my git local commits and merge them into one commit?如何获取一堆我的 git 本地提交并将它们合并到一个提交中?
【发布时间】:2012-10-26 06:38:21
【问题描述】:

在我的公司,我们最近迁移了 git。在这个环境中工作的过程中,我最终做了一堆本地提交(在我的本地分支中)。为了让我的代码保持更新,我进行了拉取。现在最终结果是,当我执行 git log 时,我在该日志中找到了我的提交以及其他开发人员的提交。在将我的提交推送到远程之前,我想收集我所有的本地提交并将它们合并到一个提交中(以减少日志中的噪音)并将其推送到远程。我如何在 git 中做到这一点?

【问题讨论】:

    标签: git git-commit


    【解决方案1】:

    最简单的做法是,一旦你完成了git pull 并且你已经解决了任何冲突并且都是最新的,将你的分支指针重置为最新的远程提交(我假设origin/master ) 然后进行新的提交。

    git reset --soft origin/master
    git commit
    

    新提交将作为远程主提交之上的单个新提交将您的所有更改。然后,您可以将此提交推送到远程。推送前使用git show 验证提交。

    注意:这假设您只从一个共享分支 (master) 中拉出,或者您拉出的任何其他共享分支已经合并到远程的 @987654326 @。

    【讨论】:

    • 我喜欢。比git rebase -i简单一点。
    【解决方案2】:
    git fetch <remote name>
    git rebase -i <remote name>/<branch name>
    

    有关如何使用rebase -i(交互式变基)的更多详细信息,请参阅本指南:

    http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html

    请注意,rebase/squashing 并不总是与合并提交很好地配合。变基通常会在您合并的内容之后移动您的提交,因此合并提交可能会消失并且您不会遇到问题,但如果您合并的内容不在远程分支中,您需要小心。

    【讨论】:

      【解决方案3】:

      你应该改变方法。在本地分支上开发时,您不应该做任何池(或提取)。而是尝试更新“主”开发分支,然后不时使用“主”分支重新定位(git rebase)您的开发分支。

      现在也许 git cherry-pick 可能是您正在寻找的。​​p>

      您也可以尝试手动重置 (git reset --soft) 到您在给定(您的开发)分支上的第一次提交,然后仅选择您的更改,将下一次提交作为一次提交。

      如果你的分支问题上只有你自己的提交,那就简单多了:你可以压缩那些(git squash)。一些在你的开发分支上不创建太多提交的方法也在修改你的提交(git ammend)。

      【讨论】:

      • Git 在变基方面实际上非常聪明,即使您拉入上游中间分支,只要您要变基的内容包括您在此期间拉入的任何内容。
      • 确实如此,但在这种特殊情况下,一切都取决于从哪些分支提交中提取以及应该合并哪些分支。如果两者相同(或者两者的提交相同,则更通用),这是正确的。如果不是樱桃采摘应该可以工作。
      猜你喜欢
      • 2013-10-11
      • 2010-12-31
      • 2010-12-16
      • 2010-10-08
      • 2012-09-13
      • 2017-05-07
      • 2023-01-12
      • 2011-06-03
      相关资源
      最近更新 更多