我已经对我要撤消的git仓库进行了一些更改。
我的git repo看起来像这样:
A-B---- master
\ /
C-D * develop
我在develop
分支上,忘记它与master
分支不同,在develop
上进行了更改,将其合并到master
,然后推送到我的遥控器(称为publish
)。
因为自B(共同祖先)以来主人没有变化,所以git进行了快进合并。
现在,我的回购看起来像这样:
A-B-C-D master, develop, remotes/publish/master, remotes/publish/develop.
我想恢复上一次合并,将master
恢复为B.
根据我在How to undo last commit(s) in Git?中所读到的内容,我使用git reset sha-of-B
将我的master
分支恢复为修订版B.
问题:
develop
还原到修订版D?答案 0 :(得分:74)
如果重置分支主控,则不会触及开发分支。为了按顺序重新输入所有内容,您应该:
git checkout master
git reset --hard sha-of-B
git checkout develop
git reset --hard sha-of-D
git checkout master
git merge develop --no-ff
答案 1 :(得分:18)
git reset --hard @{1}
git push publish develop --force-with-lease=master
--force-with-lease
获得许可 --force
可能默默覆盖其他人的工作,所以我从不使用 答案 2 :(得分:0)
如果您在develop
运行时似乎已经签出了git reset
,这就是让您失望的原因。
您可以按如下方式修复develop
:
git checkout develop
git merge --ff-only D
现在,您可以将master
恢复为B:
git checkout master
git reset --hard B
返回develop
并推送它:
git checkout develop
git push develop