113

在我们的 repo 中,我们最终得到了很多这样的提交:

Merge branch 'master' of bitbucket.org:user/repo

每当开发人员将他/她的本地分叉同步到顶级存储库时,都会发生这种情况。

有没有办法避免这种合并提交地狱把所有的回购日志弄得一团糟?在以某种方式发起拉取请求时可以避免它们吗?

我知道如果仅在我的本地 VM 中完成,我可以执行 git rebase,在 GitHub/BitBucket UI 中是否有任何等价性?

你们是怎么做到的?

4

2 回答 2

160

合并前重新设置特征分支

如果要避免合并提交,则需要确保所有提交都是快进的。为此,请确保您的功能分支在合并之前干净地重新定位到您的开发线,如下所示:

git checkout master
git checkout -b feature/foo

# make some commits

git rebase master
git checkout master
git merge --ff-only feature/foo

Rebase 也有很多标志,包括使用标志的交互式变基-i,但如果您要使事情尽可能简单并希望在合并时保留所有分支历史记录,则可能不需要它。

使用--ff-only旗帜

除了变基,使用--ff-only标志将确保只允许快进提交。如果它是合并提交,则不会进行提交。git-merge(1) 手册页说:

--ff-only

拒绝合并并以非零状态退出,除非当前 HEAD 已经是最新的或者可以将合并解析为快进。

于 2013-05-03T12:14:09.643 回答
15

“Todd A. Jacobs”已经提到“rebase”是这里的概念。这只是一种更详细的做事方式。

假设您在 master 分支上

$ git branch
  * master

你想要修复,所以创建一个从主分支分支的“fixbranch”

$ git checkout -b fixbranch

也许你会在这个分支上工作几天并且有几个提交。

您想将提交推送到中央主仓库的那一天!Checkout master 并从中央主仓库获取最新更改

$ git checkout master
$ git pull origin master

将您的 fixbranch 重新设置为与 master 一起拥有干净的历史记录并解决本地 repo 本身中的冲突(如果有)。

$ git checkout fixbranch
$ git rebase master

现在 fixbranch 已更新到中央 master,让我将 fixbranch 合并到 master 分支

 $ git checkout master
 $ git merge fixbranch

我受够了!让我将本地 master 推到中央 master

$ git push origin master

https://git-scm.com/book/en/v2/Git-Branching-Rebasing

于 2018-10-18T08:44:16.930 回答