Git master 分支需要回退怎么办?

2018-11-16 23:19:25 +08:00
 0xABCD

由于某种原因,生产环境的某个功能需要撤掉,但是别的功能已经基于 master 分支开发挺远的了,现在 master 回退倒是好办,难的是基于那个点的 master 分支开发的 feature 分支怎么撤掉那个功能,并且保留现有代码?

目前我想到的方案是: 重新从回退后的 master 分支新开一个分支 A,然后通过 cherry-pick 将在 feature 分支上的 commit 在新分支 A 应用一次。但是 commit 已经较多了,所以这个方案比较笨。

git 有没有类似分支做集合运算的功能:new_feature = old_feature - new_master ?

6367 次点击
所在节点    程序员
12 条回复
takeoffyoung
2018-11-16 23:24:18 +08:00
git revert 有什么需求不能满足吗?
xyz1001
2018-11-16 23:28:09 +08:00
git rebase -i master,将不需要的 commit 标记为 drop
mcfog
2018-11-16 23:31:13 +08:00
你把 master 搞定以后别的分支 merge master 不就好了
chinvo
2018-11-16 23:35:03 +08:00
master 上 revert,别的分支 merge 进去的时候会符合的,如果有冲突人工处理下
0xABCD
2018-11-16 23:50:03 +08:00
@takeoffyoung @xyz1001 @mcfog @chinvo commit 有点多哦,一个一个 revert 有点麻烦,主要是想问一下有没有更便捷的方案类似集合运算那种,谢谢回复
oott123
2018-11-17 00:30:01 +08:00
https://harttle.land/2018/03/13/remove-certain-commits-from-history.html#header-3
Arnie97
2018-11-17 00:59:12 +08:00
二楼正解,不再复述
mcfog
2018-11-17 08:28:08 +08:00
@0xABCD 要干掉的功能不是独立一个分支?的话没救了只能手动

独立的话,revert merge commit 一个应该就好了吧
就算不行,也可以这样手动生成:
1. 在 master 分支被合并之前的最新分支记个 branch 叫 tmp (或者 copy 下 hash 也可以)
2. checkout 不要的那个 feature branch,rebase 到 tmp,用 squash 压缩成一个,过程要解决的冲突应该和 merge 是一样的,原样解决
3. revert 刚刚 rebase 形成的一个 commit
4. 你应该还在 feature branch,checkout 最新 master,Cherry pick 你在 feature branch 刚才 revert 形成的 commit

不管我的做法对不对或者你看没看懂,劝你不要改变已经被 push 的历史,除非你和你的团队所有人都明白这里面的道理
quinoa42
2018-11-17 08:52:29 +08:00
master revert, feature 分支 rebase 下
wweir
2018-11-17 15:04:47 +08:00
1、基于 master 新建临时分支
2、reset master 到刚合并需要回滚代码的状态
3、revert master 上不需要的 commit
4、merge 临时分支
wweir
2018-11-17 15:06:24 +08:00
@wweir 这么一套复杂操作的好处是 可以保留所有 commit 记录
msg7086
2018-11-17 16:20:12 +08:00
我们的习惯是 force push 一把梭。如果你们玩 Git 还没熟到能承受一把梭的话,就只能把整个更改集 revert 掉以后把别的分支 rebase 一下。如果你们还没熟到能承受 rebase 的话,就只能把 revert commit 给 cherry pick 进 feature 了。

简单说,看你们 Git 玩得 6 不 6,以及对 Git history 的洁癖程度有多高。

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

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

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

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

© 2021 V2EX