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