Git:将多个提交合并到一个提交中

时间:2019-03-11 12:08:14

标签: git commit rebase squash

我正在一个git存储库上工作,而我没有任何合并写操作。有很大的要求,至少需要1-3周才能完成。我从master取出一个分支,然后在其中进行更改。在这段时间内,我会在一天结束时生成多个提交,并确保将我的代码推送到远程分支。

分支代码上的多个提交看起来不太好,因此使用下面的链接使用rebase命令将它们压缩为一个提交。

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

这似乎不是一个很好的选择,因为该过程很长,并且也有出错的机会。

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

4 个答案:

答案 0 :(得分:1)

一次全部推送多个提交没有错。有时您可能要执行一系列任务,并且仅在任务完成后才需要提交所有内容。另一种情况是,您需要执行多个本地提交,并且仅在连接到服务器后才推送每个提交。

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

这两种方法都是正确的,没有正确或错误的方法。您可以选择自己喜欢的人。

答案 1 :(得分:1)

在某些情况下,与交互式变基相比,另一种可能的操作方式(比交互式变基更简单,更不容易出错)是撤消提交并为整个批次重新提交一次。我也觉得更快。

让我们假设此示例树有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的所有更改的总和。

但是,正如其他人所指出的那样,多个小的提交不是问题,将太多的东西组合在一起也可能带来讨厌的副作用。请务必与您的同事讨论并适应您的工作流程。

答案 2 :(得分:1)

您可以在编辑之前将分支轻柔地重置为特定的提交,从而可以一次提交所有编辑。

答案 3 :(得分:0)

正如其他人所指出的那样,多次提交不是一件坏事,但是一系列混乱的提交可能是件坏事。

您可以使用交互式rebase通过合并重新排序,合并和拆分来更改提交,直到产生有意义的顺序为止。

在推送到共享存储库之前,我发现对于本地分支机构来说这几乎是必不可少的。

只需确保仅在不共享的分支上这样做。