git - Git恢复多个提交,包括1次合并,并全部推送到原点。
我知道有一大堆类似的问题,但还是找不到答案,我一直在看所有的问题,并尝试了重置、rebase -m等。
场景:我刚刚拉了一个在Master上做的PR,但想把它移到一个分支上继续开发,同时保持Master的干净,以备不时之需。
我想恢复 本次公关的所有承诺,同时对主版进行了一些承诺。我希望保留历史,以便贡献者保留他们的贡献历史。
历史记录按时间顺序是这样的。
MASTER PR
- merge in PR: f0d3301 (Head)
| \
| \
| \
| \
| \
| | 62ed3e9 (last commit on PR)
| |
| | ... lots of others commits.
| |
| | c6e178e
| |
|ccdad84 |
| ... |
|0d16f42 |
| |
| | c56f2911 (first commit on PR)
| /
| /
| /
| /
| /
|/
| 8e74cf3 (last commit on master before PR starts)
我需要什么命令来回滚,保留历史,防止最后一次合并提交的错误,并在另一个分支上有PR的情况下推回主分支?
【回答】:
如果你能强行推送给master,"还原master "就是简单的 。
# reset the master branch on the remote repo to ccdad84 :
git push origin -f ccdad84:master
如果有其他用户已经拉了 "master",你要通知他们master被还原了,并引导他们将本地master分支重置到正确的状态。
要重置你的本地 master
枝 ccdad84
:
# from the master branch :
git reset ccdad84
如果您想存储PR分支。
git branch the/pr 62ed3e9
git push origin the/pr
如果您想存储PR分支 和 合并提交。
git branch the/mergedpr f0d3301
git push origin the/mergedpr
【回答】:你不能重写历史。如果你想从旧分支的位置开始一个分支,那就这么做。我的建议是,先在 62ed3e9 分支上创建一个分支,然后在主干上添加一个新的提交,撤销合并的影响,也就是与 ccdad84 相同。
如果尽管我刚才说了,你还是坚持要重写历史。
停止所有工作
把整个情况拉到你的本地机器上。
在62ed3e9开始一个分支。叫它
saved
.上主人,
reset --hard
到cdad84。强行推送两个分支。提醒大家开始新的克隆什么的。