如何在 GitHub/BitBucket 上避免合并-提交地狱

我们的回购中有很多这样的承诺:

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

每当开发人员将他/她的本地分支同步到顶级回购时,就会发生这种情况。

有什么办法可以避免这种混乱的回购日志吗?在以某种方式启动 pull-request 时,可以避免它们吗?

我知道我可以做 git rebase,如果这只是在我的本地虚拟机,有没有任何等价的 GitHub/BitBucket 用户界面?

How do you guys do it?

56632 次浏览

合并前重新设置特征分支的基础

If you want to avoid merge commits, you need to ensure all commits are fast-forwards. You do this by making sure your feature branch rebases cleanly onto your line of development before a merge like so:

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 已经是最新的,或者可以将合并解析为 快进。

"Todd A. Jacobs" already mentioned "rebase" is the concept here. This is just a more detailed way of doing things.

假设你在主树枝上

$ git branch
* master

您想要进行修复,因此创建一个从主服务器分支的“ fixBranch”

$ git checkout -b fixbranch

也许你会在这个分公司工作几天,然后做一些事情。

那天你想推动你的承诺,中央主回购!结帐主管,并从中央主管回购获得最新的变化

$ git checkout master
$ git pull origin master

使用主服务器重新设置您的补丁分支的基础,以便拥有一个干净的历史记录,并解决本地回购本身中的冲突(如果有的话)。

$ git checkout fixbranch
$ git rebase master

Now fixbranch is uptodate to with the central master, let me merge fixbranch into the master branch

 $ git checkout master
$ git merge fixbranch

我受够了! 让我把本地主人推给中央主人

$ git push origin master

Https://git-scm.com/book/en/v2/git-branching-rebasing