关于 git 多分支合并的问题

2017-11-14 09:38:20 +08:00
 zo

现在有两个分支分别是 master 主分支和 feature 功能分支,feature 分支是从 master 分支开出来的功能分支。我想把 feature 分支合并到主分支 master 上去。

  1. 正常的操作步骤是切换到 master 分支 -> 从远程分支拉取最新内容 -> 合并 feature 功能分支。
  2. 如果我在 feature 分支合并了 master 分支( master 分支很可能不是远程的最新分支),然后从 master 合并 feature 分支会出现什么问题?
  3. 我按照第二种的操作现在是将其他人的代码回滚到某一个时间点了,而且他们无法再把各自的分支合并到 master 分支了。有没有什么办法解决?
  4. 我尝试使用 revert 回滚了在 feature 分支中合并 master 分支的那一个 commit 点,目的是摘除错误合并进来的 master 分支。但是在切换到 master 上合并 feature 时, 从 feature 分支建立的时间点开始,合并到 master 分支的所有功能全部没有了,貌似更严重了。。。。
4138 次点击
所在节点    git
16 条回复
zo
2017-11-14 09:45:21 +08:00
慢等
fds
2017-11-14 09:59:24 +08:00
checkout 到 master 分支上
git merge --squash feature
将 feature 分支上所有修改作为一个提交加到 master 上,检查一下所有修改即可。当然分支的历史就不在主分支了,但一般开发分支的历史也不重要。
zo
2017-11-14 10:02:43 +08:00
@fds 我去试一试
finull
2017-11-14 10:28:41 +08:00
4. revert 方式并不是回滚,是添加了 revert commit 的 feature,这时候在 merge 到 master 的是后,这个 commit 就相当于 revert 了 master 的对应修改

你应该使用 reset --hard 重置分支的指向 而不是 revet

在 feature 分支上的操作也是这样,尽量不要去 merge master 到 feature
而是使用 rebase 移动 feature 相对于 master 的位置


另外 第 2 点,我觉得不应该有什么问题
finull
2017-11-14 10:30:22 +08:00
关于 git 操作,真心推荐《 Pro Git 》 这本书

右键也有这本书的链接
https://git-scm.com/book/zh/v2
zo
2017-11-14 10:32:31 +08:00
@finull 是多人分支,reset --hard 不好操作。我也觉得第二点应该不是什么问题才对,但是总有一些代码回退了
finull
2017-11-14 10:44:11 +08:00
这种 feature 分支也是多人分支吗?

如果 master 已经推到了远程 repo,要修复 master 那只能对 master 继续 revert 了
feature 分支的话,建议找到之前的 commit 检出新分支吧


强迫症真心不能接受 revert revert commit 这种鬼
skydiver
2017-11-14 10:48:47 +08:00
2 操作没问题
4 是因为 revert 是一个新的 commit,也被 merge 到 master 了,可以 revert revert
neoz
2017-11-14 12:54:51 +08:00
我现在的流程基本如下
1. 主分支 checkout 新分支( feature fix 之类
2. 提 mr/pr
3. 各种开发
4. 一小段时间就去更新下主分支
5. git rebase -i <主分支>,顺带合并 commit 等操作
6. push
7. 持续 3- 6,期间持续 review
8. 开发完结后 reviewer 正常 merge 到主分支
besto
2017-11-14 13:01:38 +08:00
同意楼上你需要定期和 master 同步, 做 rebase.

如果是想强行合并, 推荐把内容用 git format-patch 弄出来, 然后 先 git am, 可以最好, 不行再 patch -pn < 打
zdt3476
2017-11-14 14:02:23 +08:00
定期 rebase.拉远端代码也尽量 git pull --rebase
wwwyiqiao
2017-11-14 19:52:21 +08:00
我一般是这样的
1、比如现在 mster 是 1.0.0,我拉一个 feature 分支,这个 feature 分支的基线相当于 1.0.0
2、过一段时间,我 feature 分支开发完成了,想集成到 master,但是 master 升到了 1.2.0
3、这个时候将 feature 升级基线到 1.2.0, 这个时候可能有冲突
4、master 合并 feature,这个时候可能的冲突就比较小了
zo
2017-11-17 10:56:42 +08:00
@finull feature 也是多人分支,是一个小功能,多个人在参与
zo
2017-11-17 10:57:45 +08:00
@besto 定期同步用 git pull 不是一样的么? rebase 方式会更好是吗?
besto
2017-11-17 11:12:55 +08:00
@zo 见楼上 git pull --rebase 就一样了
zo
2017-11-17 11:20:37 +08:00
@besto 大概知道为什么用 rebase 的方式了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/406165

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX