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
如果 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