如何git merge --squash以便github"网络"图显示合并

Jac*_*cob 7 git merge github

假设你有这个:

     master: o--o--o
development:        `o--o--o
Run Code Online (Sandbox Code Playgroud)

我想将更改合并为一次提交(避免沿途的所有垃圾提交):

git checkout master
git merge --squash development
Run Code Online (Sandbox Code Playgroud)

但是github网页显示了这个:

     master: o--o--o---------o
development:        `o--o--o
Run Code Online (Sandbox Code Playgroud)

你应该怎么做才能显示你的期望,即:

     master: o--o--o---------o
development:        `o--o--o’
Run Code Online (Sandbox Code Playgroud)

Thi*_*t J 9

对于最后一个图,您可以使用以下命令:

git merge --no-ff
git branch -d development

master: o--o--o---------o
               `o--o--o’
Run Code Online (Sandbox Code Playgroud)

你告诉git创建一个合并提交,即使合并的分支是快进的,即master的最后一次提交是合并分支的直接祖先.

请注意,"垃圾提交"不会被删除,但除非您有充分的理由,否则您应该保持历史记录的原样.压缩提交会使您难以浏览历史记录.

如果您觉得您的开发分支历史记录中充满了废话,您还可以在合并之前使用交互式rebase重写它.

git checkout developement
git rebase -i master
Run Code Online (Sandbox Code Playgroud)

您将能够选择,编辑,重新排序,压缩或丢弃提交并重写您的分支历史记录.完成后,使用经典合并(根据需要使用或不使用--no-ff).