Git 请教大家是怎么使用 git 的分支的?

zlx_star · 发布于 2012年07月12日 · 最后由 Saito 回复于 2013年03月18日 · 7035 次阅读
2456

请教大家是怎么使用 git 的分支的?

共收到 26 条回复
1153

git-flow

599

新增一个功能或者修复一个bug的时候,都新开一个分支,搞定以后回到master再merge

2456

也看过 git-flow,但是通常不同的提交之间一般都会有依赖的,这样 如图中 http://nvie.com/posts/a-successful-git-branching-model/ 中的两个分支之间就会有 merge 的过程,如果经常 merge, 那两个分支不是就没用了?

1

#5楼 @zlx_star 依赖是指什么?

我现在2人开发一个新项目,一个 master 分支,然后两人分别负责前后台各一个分支,前后台分支不断 merge --no-ff master,解决冲突后 checkout master & merge --no-ff feature 。

96

关于分支有个疑问,比如我在master下面创建了一个develop分支,然后通过git checkout develop 到develop分支下去开发,但是当我通过git checkout master换回到master分支下的时候,用git status,还是能看到我在develop下修改的文件?难道开分支一定要重新换到另一个目录下才行吗?

244

#7楼 @cdredfox 你的变更没有提交到develop分支,git当然给你留着了。这种情况下,如果你的修改是完整的,可以直接在develop下commit,然后checkout到master就没有那些内容了,如果你的修改不完整,git还提供了一种机制用于临时保存:stash ,具体去google吧

96

哦~明白了,谢谢~

2456

#6楼 @Rei 比如说某一个功能依赖于前一个功能或者 某个bugfix。如果将 bugfix 单独放在一个分支,那就要 merge 一下才能保证每个分支都是可工作的。

1

#10楼 @zlx_star bugfix merge 进 develop 分支,然后到 feature 分支把 develop merge 进来。

594

我喜欢在merge之前,先rebase一下

2456

#12楼 @Rei 有点明白了,这样每个分支的 log 会很清晰。那是不是每次在一个 branch 上开发都先把 develop merge过来。 #13楼 @ery 这个时候rebase可以用来做什么?我只在修改历史 log 时用过它

1

#14楼 @zlx_star 项目刚开始的时候是频繁 merge,大概一天 merge 1 ~2 次。到上线以后就不太会出现两个分支互相依赖了,因为可以按功能划分,有依赖的都在同一个分支。早期因为架子还没成熟,就会相互依赖,这时候通过一个主线分支(主开发分支)来作为 merge 的中心,而不是 branch 之间互现 merge。

594

如果,直接merge,那么结果是log路线错综复杂。 如果,在merge前,rebase一下,然后再merge, 那么,最后log的只有一条线,而不是多条线,

这是没用rebase的效果

这是用了rebase后的效果

你喜欢哪个?

2456

#15楼 @Rei 了解,thx

#16楼 @ery 当然是后者,呵呵

594

那就试试rebase吧

1

#17楼 @zlx_star #18楼 @ery

rebase 适合于少量的补丁性质的 commit,不要把已经提交到公共区域的分支 rebase。

594

#19楼 @Rei 我没有理解,"不要把已经提及到公共区域的分支 rebase" 什么是 公共区域 啊?

1

#20楼 @ery 比如 B 分支有两个人在上面开发,然后把 B rebase A。

这里有详细例子 http://git-scm.com/book/zh/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%9A%84%E8%A1%8D%E5%90%88

一旦分支中的提交对象发布到公共仓库,就千万不要对该分支进行衍合操作。
如果你遵循这条金科玉律,就不会出差错。否则,人民群众会仇恨你,你的朋友和家人也会嘲笑你,唾弃你。

594

#21楼 @Rei 谢谢,我明白了。 我们的情况如下: 如果,B 分支有两个人在上面开发, 那么,B 分支一定是 master分支。

我们的原则如下: 只能 其他分支 rebase master 绝不能 master rebase 其他分支

1

#22楼 @ery 我这推广了一段时间 rebase,现在组员对 git 熟练起来后,开始提倡 merge 和 rebase 并用。rebase 用在短小的补丁 commit 上,merge 用在特性开发,因为希望 logs 不单要线索清晰(merge 点不要太多),也要反映协作情况(多线进行),不然一个两天前的 commit rebase 到了今天的 commit 上,以后查看起来会很奇怪。

594

#23楼 @Rei 我明白你的意思啦,我们只追求线条清晰,不追求协作情况。哈哈

96

@saito gitlab的merge quest, 审批的时候如果选 delete source branch,,, 这个效果与 --no-ff 一致么

243

#25楼 @jeffery9 delete source branch 跟 --no-ff 没关系.

merge request 的 merge 默认是 --no-ff 的.

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册