我正在开发一个git存储库,我没有任何合并写入。有大量要求需要至少1-3周才能完成。我从主人那里拿出一个分支,然后对其进行修改。在此期间,我在一天结束时生成多个提交,并确保我的代码被推送到远程分支。
分支代码上的多次提交看起来不太好,所以按照下面的链接使用rebase命令将它们压缩到一个提交中。
https://blog.carbonfive.com/2017/08/28/always-squash-and-rebase-your-git-commits/
这似乎不是一个很好的选择,因为这个过程很长,也有可能出现错误。
我的问题是,我可以遵循其他任何选择吗?
在某些情况下,另一种可能的操作过程,比某些上下文中的交互式rebase更简单且更不容易出错,只是撤消提交并为整个批次重新提交一次。我也发现它更快。
让我们假设这个示例树有2个分支,master
和complex-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
包含从D
到K
的所有更改的总和。
然而,正如其他人所指出的,多个小提交不是问题,将太多东西组合在一起也会产生令人讨厌的副作用。务必与您的同事讨论并适应您的工作流程。
一次推送多个提交没有错。有时您可能正在处理一系列任务,并且只有在任务完成后才需要提交所有任务。其他情况需要您执行多个本地提交,并且只有在连接到服务器后才推送每个提交。
您可以将所有提交压缩为一个或将每个提交合并到主分支。
这两种方法都是正确的,没有正确或错误的方法。您可以选择自己喜欢的那个。
您可以在编辑之前将分支轻轻地重置为特定提交,这样您就可以在一次提交中提交所有编辑。
正如其他人所指出的那样,多次提交并不是一件坏事 - 但是一系列无序的提交都可以。
您可以使用交互式rebase通过组合重新排序,组合和拆分来更改提交,直到生成的顺序有意义。
在推送到共享存储库之前,我发现这对于本地分支几乎是必需的。
请确保仅在未共享的分支上执行此操作。