Git:将多个提交合并为一个提交

Git: Combining multiple commits into a single commit

我正在处理 git 存储库,其中我没有任何合并写入。有大量要求至少需要 1-3 周才能完成。我从 master 那里取出一个分支并在其中进行更改。在这段时间里,我在一天结束时生成了多个提交,并确保我的代码被推送到远程分支。

分支代码的多次提交看起来不太好,所以按照下面的 link 使用 rebase 命令将它们压缩为一次提交。

https://blog.carbonfive.com/2017/08/28/always-squash-and-rebase-your-git-commits/

这似乎不是一个很好的选择,因为这个过程很长,而且也有可能出错。

我的问题是,我还有其他选择吗?

一次推送多个提交并没有错。有时您可能正在处理一系列任务,并且只需要在任务完成后才提交所有内容。其他情况将要求您进行多次本地提交,并且仅在连接到服务器后才推送每个提交。

您可以将所有提交压缩为一个,也可以将每个提交合并到 master 分支。

两种方法都对,没有对错之分。由你选择你喜欢的。

另一种可能的行动方案,在某些情况下比交互式变基更简单且更不容易出错,是仅撤消提交并为整个批次重新提交一次.我也觉得比较快。

让我们假设这个示例树有 2 个分支,mastercomplex-feature

A-<-B-<-C <<< master
     \
      D-<-E-<-F-<-G-<-H-<-I-<-J-<-K <<< complex-feature

在合并这个长长的提交列表 (D,E,F,G,H,I,J,K) 之前,您可以执行以下操作:

git checkout complex-feature
git reset --soft B
git commit -m "Global message for commits D through K"

然后这棵树看起来像这样:

A-<-B-<-C <<< master
     \
      L <<< complex-feature

...其中提交 L 包含从 DK 的所有更改的总和。

然而,正如其他人所指出的,多个小的提交不是问题,将太多的东西组合在一起也会产生令人讨厌的副作用。请务必与您的同事讨论并适应您的工作流程。

您可以在编辑之前将您的分支软重置为特定提交,这样您就可以在一次提交中提交所有编辑。

正如其他人指出的那样,多次提交并不是坏事——但一系列杂乱无章的提交可能是坏事。

您可以使用交互式变基通过结合重新排序、合并和拆分来更改提交,直到生成的顺序有意义。

我发现在推送到共享存储库之前,这对本地分支机构来说几乎是强制性的。

请确保仅在未共享的分支上执行此操作。