如何避免GitHub / BitBucket上的merge-commit地狱

时间:2013-05-03 11:58:27

标签: git github bitbucket

在我们的回购中,我们最终会收到很多像这样的提交:

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

每次开发人员将他/她的本地分支同步到顶级仓库时都会发生这种情况。

无论如何要避免这种合并提交地狱混乱所有的回购日志?在以某种方式启动拉取请求时可以避免它们吗?

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

你们是怎么做到的?

2 个答案:

答案 0 :(得分:110)

合并前的Rebase功能分支

如果要避免合并提交,则需要确保所有提交都是快进的。你可以通过确保你的功能分支在合并之前干净地重新定位到你的开发线上来实现这一点:

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

     

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

答案 1 :(得分:1)

“托德·雅各布斯(Todd A. Jacobs)”已在此处提到“变基”。这只是一种更详细的处理方式。

假设您在master分支上

$ git branch
  * master

您要进行修复,因此创建一个从母版分支出来的“ fixbranch”

$ git checkout -b fixbranch

也许您会在该分支上工作几天,并进行几次提交。

您想将提交推送到中央主存储区的那一天!结帐母版,并从中央母版存储库中获取最新更改

$ git checkout master
$ git pull origin master

使用主服务器为您的修订分支重新建立基础,以保持干净的历史记录,并解决本地存储库本身中的冲突。

$ git checkout fixbranch
$ git rebase master

现在fixbranch是中央主机的最新版本,让我将fixbranch合并到master分支中

 $ git checkout master
 $ git merge fixbranch

我完成了!让我把本地主人推向中央主人

$ git push origin master

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