使用git merge --squash将master在以前合并到develop中时合并为master?

时间:2017-08-08 08:11:28

标签: git version-control merge

我有两个分支。我的主分支和我的功能分支。

我正在开发功能分支并在那里做了几次提交并将它们推送到远程。我不时将master分支合并到我的develop分支中,以确保我得到最新的更改。

现在我已完成开发分支的开发,并希望将开发分支合并到主分支。

理想情况下,我想将开发分支上的所有提交压缩成一个单独的提交。我想我可以用

做到这一点
{{1}}

但是,当我不时将master合并到开发中时,我还可以这样做吗?

2 个答案:

答案 0 :(得分:1)

您已经不时将master合并到develop - 您的意思是说您已使用{{1}的更改更新了master分支和develop分支分支,在您的本地仓库中,不时更正?

在这种情况下,当您执行mastergit checkout develop时,如果您是唯一一个在此分支上工作的人,那么您应该只看到您的提交到目前为止 - 在这种情况下,您可以直接执行git log,这将对git merge --squash develop分支进行所有提交并将其压缩为一个。

如果你还有其他人在这个develop分支上工作,他们的提交也在你们之间,而你只想压缩你的提交,那么做一个{{1你可以在相应的提交之前用'squash'替换'pick'这个词来挑选你想要压缩的提交。

或者,您可以按照列出的第一种方法here进行操作。

  

将功能分支中的多个提交转换为的最简单方法   单一提交是重置主服务器中的功能分支更改   再次提交,这次 - 一切都是一体的。

答案 1 :(得分:1)

如果使用git merge develop --squashdevelop分支合并到master,则不会将提交压缩到develop分支上的提交,而是创建“合并提交”在主分支上。如下图所示:

假设原始提交历史记录是(将develop合并到master之前):

A---B---F---G   master
     \
  …---C---D---E   develop

执行git merge develop --squash后,新提交H就像您真正将develop分支的更改合并到master一样。

A---B---F---G---H   master
     \
  …---C---D---E   develop

因为您可以将master合并到develop,然后将develop分支合并回master分支。但这不是推荐的方式。您应该只将一个分支视为主分支(例如master分支作为主分支)。当其他分支(develop)具有新功能/更改时,您只需将develop合并到master分支中。当稍后在develop分支上提交其他新更改时,您只需要不时将develop分支合并到master分支。

如果您只想在develop分支上压缩提交,则可以使用git rebase -i develop~n,然后编辑要压缩的提交(将drop更改为squash )在交互式窗口中。