Git 只合并一个开发分支的最终结果

Git merge only the final result of a development branch

如果 Git 存储库结构如下所示:

master: A-C
dev:     \B-D-E

是否可以将开发分支合并到 master 中,这样只有一个提交被添加到 master 中,包含开发分支中所有提交中发现的所有更改。所以上面的结构会合并成这样:

master: A-C-E'

E' 提交将包含来自开发分支的所有更改,并且仅包含最新的提交消息,在一次整洁的提交中将新功能添加到 master。

这在 Git 中可行吗?我希望能够保持 GitHub 存储库的历史整洁,因为我的开发分支通常包含未完成、未完善且不适合人类使用的早期提交。

合并部分应该很简单(参见“How to use git-merge --squash?”):

git checkout master
git merge --squash dev

不过您可能需要调整提交消息:

git commit --amend -m "<commit message from E>"

(你有other options when doing the merge

你可以做到这一点,但它不会是合并。 (请记住:合并提交有 2 个或更多父项。E' 只有一个父项,但是:C。)

git rebase -i master dev
  • 将打开一个文本编辑器。将 pick 更改为 squash 除了 第一行,然后保存文件并关闭编辑器。
  • 将打开一个文本编辑器。 (填充了不同的内容。)将其内容编辑为您想要 E' 的提交消息,然后保存文件并关闭编辑器。

然后

git checkout master
git merge dev --ff-only
git branch -d dev