求教...把 feature 分支给 rabase 到了 master 上,并且 push 了....怎么破?

2016-11-22 15:57:02 +08:00
 malkavia
使得所有在 master 上,不在 feature 上的几十条 commit 又重新被提交了一遍

只能 reset --hard 到拉出 feature 分支的节点上将原本在 master 上的 commit 重新 cherry-pick ,再 merge feature 分支吗?

还是说就让它们放在那里,不管了?

p.s. 为了避免更乱,已经叫同事们暂时不要 push 代码了,可以用 push --force 来回退
4003 次点击
所在节点    git
16 条回复
lonenol
2016-11-22 16:02:30 +08:00
本地回退,删掉远程分支,重新 push ,master 分支的话要去掉分支保护功能
alexapollo
2016-11-22 19:48:19 +08:00
reset 到上一次操作
yxzblue
2016-11-22 19:53:25 +08:00
有什么是 revert 做不到的?
cxh116
2016-11-22 19:57:17 +08:00
@yxzblue rebase 不是 merge ,用 revert 还真做不到。就跟 merge 加了 ff 参数,不会生成 commit ,一样不能用 revert 。
XiaoxiaoPu
2016-11-22 19:59:23 +08:00
git reflog 里找到 rebase 操作前的 hash , git check ${hash} 就可以回到操作前 master 所在的 commit ,重新建一个 master 分支,然后 git push --force origin master
hantsy
2016-11-22 22:54:58 +08:00
reset, cherry pick.
zwzmzd
2016-11-23 00:30:04 +08:00
个人觉得 5 楼方法靠谱,好多次干了挫事都是靠 reflog 救命
Rabbit52
2016-11-23 00:43:10 +08:00
reset && push -f && 通知所有人~
msg7086
2016-11-23 07:08:06 +08:00
我的建议,如果你实在搞不清分支间要怎么处理,那么最好还是弄个图形界面。
安利一下 SmartGit ,打开 Log 界面,把 Commit 理顺了,然后 force push 一次解决问题。
这种危险操作我真心不推荐用命令行来搞。
msg7086
2016-11-23 07:09:56 +08:00
另外说一句。如果 master 的提交被复制到了 feature 上,这种情况是他 rebase 了 master 到 feature ,而不是你标题说的 feature 给 rebase 到 master 上。后者是很安全的,我们天天在做,前者才是反向 rebase ,才是大问题。
shanjinwei
2016-11-23 08:10:21 +08:00
对此差异,修改过后上传
malkavia
2016-11-23 09:16:00 +08:00
@XiaoxiaoPu 我这样试过, checkout 到之前的 hash 上之后,会丢掉所有 <生成两次 commit 的提交>
malkavia
2016-11-23 09:16:42 +08:00
@msg7086 是的是的,我发帖的时候没有理清,确实是反向 Rebase
rashawn
2016-11-23 10:05:09 +08:00
最简单的就是 checkout 回去 新建分支 删掉远程 然后覆盖
shihty5
2016-11-23 11:28:23 +08:00
reflog 能记录下所有分支所有事件。
通过时光机回到过去某个节点,然后重新开始就好了。
真希望人生也是这样。
iluhcm
2016-11-23 15:45:24 +08:00
Sourcetree+ git reset --hard 已经拯救了无数回

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

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

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

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

© 2021 V2EX