在我们的 repo 中,我们最终得到了很多这样的提交:
Merge branch 'master' of bitbucket.org:user/repo
每当开发人员将他/她的本地分叉同步到顶级存储库时,都会发生这种情况。
有没有办法避免这种合并提交地狱把所有的回购日志弄得一团糟?在以某种方式发起拉取请求时可以避免它们吗?
我知道如果仅在我的本地 VM 中完成,我可以执行 git rebase,在 GitHub/BitBucket UI 中是否有任何等价性?
你们是怎么做到的?
如果要避免合并提交,则需要确保所有提交都是快进的。为此,请确保您的功能分支在合并之前干净地重新定位到您的开发线,如下所示:
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”已经提到“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