git远程仓库回退的问题
假设一开始你的本地和远程都是:
a -> b -> c
你想把HEAD回退到b,那么在本地就变成了:
a -> b
这个时候,如果没有远程库,你就接着怎么操作都行,比如:
a -> b -> d
但是在有远程库的情况下,你push会失败,因为远程库是 a->b->c,你的是 a->b->d
两种方案:
-
push的时候用
--force
,强制把远程库变成a -> b -> d,大部分公司严禁这么干,会被别人揍一顿 -
做一个反向操作,把自己本地变成a -> b -> c -> d,注意b和d文件快照内容一莫一样,但是commit id肯定不同,再push上去远程也会变成 a -> b -> c -> d
简单地说就是你无法容易地抹去远程库的提交信息,所以本地提交怎么都行,push前想好了
反向操作a -> b -> c -> d
使用 git revert <commit_id>操作实现以退为进,git revert 不同于 git reset 它不会擦除"回退"之后的 commit_id ,而是正常的当做一次"commit",产生一次新的操作记录,所以可以push,不会让你再pull其他的不敢妄加猜测。