git - 如何压缩一个分支中的提交,同时将它们保留在另一个分支中?

标签 git git-merge git-rebase git-workflow

我经常犯。我想将细粒度提交的历史记录保存在本地 Git 存储库的一个分支中,并将更粗粒度的提交推送到远程存储库中。

我希望能够在我的“细粒度”本地分支中找到相应的提交。

我怎么做?

最佳答案

为了使您的本地分支远离远程:

  • 创建并 checkout 本地分支(我们称之为 Ruby 分支)。根据需要提交所有细粒度的提交。

    m1 - m2     <- master, origin/master
      \
       r1 - r2 - r3  <- Ruby (fine grained commits - no origin/Ruby)
    
  • 每当您在 Ruby 中完成粗粒度的工作时要发送到远程,将其 merge 到本地存储库上的适当分支,该分支也是远程的分支。让我们假设这个分支是 master ,但它可能是其他类似 dev , release-xyz , feature-123 , 等等。)

    m1 - m2 ------- m3   <- master (new merge m3 from Ruby)
      \            /
       r1 - r2 - r3  <- Ruby
    
  • 要创建 merge 提交(上图中的 m3),请检查要 merge 的分支(即 master 等)并且不要重新设置 Ruby分支到 master ,这将复制所有提交 r1 , r2 , 和 r3master .相反,只需使用提交进行正常 merge (即 git merge Ruby )。在 merge 提交中,按照您认为合适的方式总结提交消息中的更改组。
  • 确保 master已 checkout ,并推送到远程 - 或使用特定的推送命令来确保您正在推送 master ,而不是 Ruby .

    m1 - m2 ------- m3   <- master (origin/master updated to m3 from push)
      \            /
       r1 - r2 - r3  <- Ruby (still no origin/Ruby - local only)
    

  • 这个想法是我们保持Ruby仅作为本地分支,从不将其推送到远程。推Ruby当然没有坏处如果其他人应该可以访问这些细粒度的提交。此外,通过推送 Ruby ,它将被保存为备份,以防您的 PC 出现故障,如果需要,您可以将其克隆到另一台 PC 并且您的 PC 不可用。所以你可能想考虑只制作 Ruby您推送到远程的分支 - 但即便如此,您可能仍希望与上述单个提交 merge 。

    关于git - 如何压缩一个分支中的提交,同时将它们保留在另一个分支中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46516708/

    相关文章:

    git - 恢复 merge 恢复

    git - 是否可以删除github帐户

    git 扩展和 *.xls

    Git 只 merge 一个开发分支的最终结果

    git - 撤消在 rebase 中完成的 git rerere 解决方案

    git - 我如何 git rebase 第一次提交?

    linux - 用于 kdevelop 的 cmake kdev-executebrowser 插件

    git - 取消 merge 一个 git 分支,保留 merge 后的提交

    git - 如何运行 git rebase 并忽略空格?

    git - 更改根提交父项以指向另一个提交(连接两个独立的 git 存储库)