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