我经常犯。我想将细粒度提交的历史记录保存在本地 Git 存储库的一个分支中,并将更粗粒度的提交推送到远程存储库中。
我希望能够在我的“细粒度”本地分支中找到相应的提交。
我怎么做?
最佳答案
为了使您的本地分支远离远程:
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
master
等)并且不要重新设置 Ruby
分支到 master
,这将复制所有提交 r1
, r2
, 和 r3
到 master
.相反,只需使用提交进行正常 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/