git/gitlab 如何取消 merge 的代码

30 天前
 yujianwjj

当前版本是 1.0 ,现在团队在 dev_1.1 的分支上提交代码,但是因为一些原因,原计划的一些功能,不能在 1.1 版本上线,但是部分代码已经 merge 进了 dev_1.1 分支里面。这个时候一般怎么操作?

2142 次点击
所在节点    git
18 条回复
rlds
30 天前
回滚
flyqie
30 天前
手动 revert 那个 commit?
rlds
30 天前
同时可以在了解下 cherry pick
yujianwjj
30 天前
cherry pick 要重新创建一个分支,然后才能 cherry pick ,现在是 dev_1.1 还是下个要上线的分支
codeMore
30 天前
如果部分已经合进去的代码是在提交的最后几次,那可以直接 reset --hard 到前面的提交,如果在中间,那从 1.0 版本创建出一个新分支叫 dev_1.1_new ,然后从 dev_1.1 里 cherry-pick 出需要的提交到 dev_1.1_new 咯,后面就上线 dev_1.1_new 咯
chf007
30 天前
除了楼上的办法,如果有系统或人工记录了特性分支,可以新建一个 dev_1.1 ,去掉不上的功能再合一遍么。这种最好有工具来完成。
v2kt
30 天前
git reflog 恢复
Nazz
30 天前
git reset --hard $hash && git push -f
IamBack
30 天前
git rebase -i 可以交互式的修改某些提交,将你想剔除的提交移动到最上面。
然后再用楼上说的办法,reset --hard
kucy
30 天前
从上一次提交,新建一个分支发到线上,这个分支就作为这次发布用一次
crysislinux
30 天前
如果是新的功能,再添加个 feature toggle 把新功能关了好了。
IMelon
30 天前
git reset 或者 git revert 会撤销修改,但是有可能撤销你想要保存的部分,结合 cherry pick 能够恢复部分修改。

因此我认为 git reset 用来撤销历史中的一段提交,再用 cherry pick 把想要的提交恢复过来。

当然,基础是一定要做好备份。
guanzhangzhang
30 天前
reset
rebase 后把 pick 换成 d
上面俩任选其一 push -f

或者可以 revert ,但是会多 commit
nothingistrue
30 天前
留历史:git revert 不想要的那些提交。很简单的一个操作,GUI 都提供的,命令都不用打。
洁癖:废了 dev_1.1 ,跳到 dev_1.2 。
作死:reset --hard && push --force 。
unco020511
30 天前
revert 或者 reset
cirzear
30 天前
revert commit
diagnostics
30 天前
revert commit
geelaw
30 天前
假设 dev_1.1 是

B -> C1 -> C2 -> C3 -> C4 -> C5 = dev_1.1

并且假设 C2 、C4 要被撤销,那么

git checkout -b new dev_1.1
git revert --no-commit C4

解决冲突,并 git add 好

git revert --no-commit C2

解决冲突,并 git add 好

git commit --edit

编辑消息,说明要暂缓某功能,并且实际操作是撤销了 C4 、C2 ,并记录冲突是如何解决的。

git checkout -b dev_1.1_bak dev_1.1
git merge -s ours --edit new

编辑消息,说明这是为了恢复暂缓功能的代码,同时实现“当前 commit 是撤销后 commit 的后代”和“blame 可以得到正确历史记录”。

git push
git checkout dev_1.1
git merge --ff-only new
git push
git branch -d new

到此为止:

- dev_1.1 是暂缓功能代码删去的状态
- dev_1.1_bak 是没有删去的状态,且是 dev_1.1 的后代
- 如果 dev_1.1 继续开发,可以在 dev_1.1_bak 上 merge dev_1.1 ,并且 merge 的时候不会删去暂缓功能的代码

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

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

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

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

© 2021 V2EX