使用 git merge --squash 将 master 合并到master,而之前 master 被合并到 mas



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

我正在功能分支上进行开发,并在那里进行了几次提交并将它们推送到远程。有时,我将主分支合并到我的开发分支中,以确保获得最新的更改。

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

理想情况下,我想将开发分支上的所有提交压缩为一个提交。我想我可以这样做

git merge --squash

但是,当我不时将主控合并到开发中时,我还能这样做吗?

如果你使用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合并到developdevelop然后将分支合并回master分支。但这不是推荐的方式。应仅将一个分支视为主分支(例如master分支作为主分支(。当另一个分支(develop(有新功能/更改时,您只需将develop合并到master分支中即可。当以后develop分支上提交其他新更改时,您只需不时develop分支合并到master分支中即可。

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

您不时将master合并到develop中 - 您的意思是说您已经不时在本地存储库中使用master分支的更改更新了master分支和develop分支,对吗?

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

如果你也有其他人在这个develop分支上工作,并且他们的提交也在你的提交之间,并且你只想压缩你的提交,那么做一个git rebase -i,你可以通过在相应的提交之前用"squash">替换单词"pick">来选择要压缩的提交。

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

将功能分支中的多个提交转换为 单次提交是重置主服务器中的功能分支更改,并且 再次提交,这一次 - 一切都合而为一。

最新更新