我与一个使用git进行源代码管理的小团队合作。最近,我们一直在做主题分支以跟踪功能,然后将它们合并到本地主服务器,然后将它们推送到远程服务器上的中央git存储库。当master中没有进行任何更改时,这很有用:我创建我的主题分支,提交它,将其合并到master中,然后推送。万岁。
但是,如果有人在我之前推送到原点,我的提交不是快进的。因此,合并提交随之而来。当主题分支需要在本地与master合并以确保我的更改与现在的代码一起使用时,也会发生这种情况。因此,我们最终到处都是合并提交,以及与友谊手镯相媲美的git日志。
所以,变基是显而易见的选择。我想要的是:
我目前的做法如下:
git checkout master
git rebase master topic_1
git rebase topic_1 topic_2
git checkout master
git rebase topic_2
git branch -d topic_1 topic_2
有更快的方法吗?
答案 0 :(得分:35)
你知道git pull --rebase
吗?当你拉动它时,它会变形而不是合并,并防止合并提交污染你的历史。
您还可以将其设置为具有branch.<name>.rebase
和branch.autosetuprebase
配置选项的分支的默认行为。
答案 1 :(得分:11)
我发现,随着时间的推移,我最喜欢的解决方案是:
git checkout topic
# make [n] commits
git rebase -i HEAD~[n] #clean up time
git checkout master
git pull --rebase
git checkout topic
git rebase master
git checkout master
git merge topic
git push origin
答案 2 :(得分:2)
对于我们的团队,我们设置了一些非常有效且根本不使用rebase的东西。
我们减少了Jira门票的工作,这些门票不用太长时间,通常需要1-2天。每个开发人员为每个票证创建一个分支并在此分支上工作。准备好分享时,这会被推送到中央服务器。
中央服务器由hudson CI服务器监控,该服务器提取更改,合并所有更新的分支,重建软件,运行测试并将所有内容推送到中央主git存储库。
从那里我们将它拉回我们的存储库。我们经常(即每隔几天)将我们的工作分支与中央主人合并,以使他们“接近”。
由于没有人在“合并”机器上工作,除了CI服务器之外没有人接触主服务器,我们很少合并问题(大约1-2%的提交)。通过清理工作区,可以在构建服务器上快速解决这些问题。我们发现我们可以通过保持分支短路并在推送之前与远程主控合并来避免大部分这些。
我也喜欢合并比变基更强大,并且需要更少的返工。
答案 3 :(得分:2)
你也可以反对最新的主人
git checkout topic_1
git rebase refs/remotes/origin/master
这消除了拉动的需要(至少在你的功能分支的EOL之前)。我们的流程使用GitHub拉取请求,因此我从不需要在本地执行此操作。