我有两个分支。我的主分支和功能分支。
我正在功能分支上进行开发,并在那里进行了几次提交并将它们推送到远程。有时,我将主分支合并到我的开发分支中,以确保获得最新的更改。
现在我已经完成了在开发分支上的开发,并希望将开发分支合并到主分支中。
理想情况下,我想将开发分支上的所有提交压缩为一个提交。我想我可以这样做
git merge --squash
但是,当我不时将主控合并到开发中时,我还能这样做吗?
如果你使用git merge develop --squash
将develop
分支合并到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
(。
您不时将master
合并到develop
中 - 您的意思是说您已经不时在本地存储库中使用master
分支的更改更新了master
分支和develop
分支,对吗?
在这种情况下,当您执行git checkout develop
和git log
时,如果您是唯一一直在该分支上工作的人,您应该只看到到目前为止的提交 - 在这种情况下,您可以直接执行git merge --squash develop
,它将对所有提交develop
分支并将其压缩为一个。
如果你也有其他人在这个develop
分支上工作,并且他们的提交也在你的提交之间,并且你只想压缩你的提交,那么做一个git rebase -i
,你可以通过在相应的提交之前用"squash">替换单词"pick">来选择要压缩的提交。
或者,您可以按照此处列出的第一种方法进行操作。
将功能分支中的多个提交转换为 单次提交是重置主服务器中的功能分支更改,并且 再次提交,这一次 - 一切都合而为一。