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

时间:2017-10-01 20:42:38

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

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

我希望能够在我的"细粒度"中找到相应的提交。当地分公司。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

为了让你的本地分支远离遥控器:

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

    m1 - m2     <- master, origin/master
      \
       r1 - r2 - r3  <- Ruby (fine grained commits - no origin/Ruby)
    
  2. 每当您要在Ruby中完成要发送到遥控器的粗粒工作时,请将其合并到本地仓库中的相应分支,该分支也是遥控器上的分支。我们假设这个分支是master,但它可能是devrelease-xyzfeature-123等其他内容。)

    m1 - m2 ------- m3   <- master (new merge m3 from Ruby)
      \            /
       r1 - r2 - r3  <- Ruby
    
  3. 要创建合并提交(上图中的m3),请检查要合并的分支(即master等),并且不要将Ruby分支重新定位到{ {1}},会将所有提交masterr1r2复制到r3。相反,只需与提交进行正常合并(即master)。在合并提交中,根据需要汇总提交消息中的更改组。

  4. 确保git merge Ruby已签出,并推送到远程 - 或使用特定推送命令确保您推送master,而不是master。< / p>

    Ruby
  5. 我们的想法是,我们只将m1 - m2 ------- m3 <- master (origin/master updated to m3 from push) \ / r1 - r2 - r3 <- Ruby (still no origin/Ruby - local only) 保留为本地分支,而不是将其推送到远程。当然,如果其他人有权访问那些细粒度的提交,那么推送Ruby是没有害处的。此外,通过推送Ruby,它将被保存为备份,以防您的PC出现故障,如果需要,您可以将其克隆到另一台PC,而您的设备不可用。因此,您可能想要考虑将Ruby作为一个分支推送到远程 - 但即便如此,您可能仍希望合并一个提交,如上所述。