Git还原多个提交,包括1个合并,以及所有在源上推送的提交
我知道有很多类似的问题,但仍然找不到答案,我一直在阅读所有的问题,并尝试重置、重新设置-m等 场景:我刚刚在Master上做了一个PR,但我想把它移到一个分支继续开发,同时保持Master干净,以应对任何紧急情况 我想恢复此PR中的所有提交,同时在主控上进行一些提交。我希望保留历史记录,以便撰稿人保留其贡献的历史记录 历史按时间顺序与此完全相同:Git还原多个提交,包括1个合并,以及所有在源上推送的提交,git,Git,我知道有很多类似的问题,但仍然找不到答案,我一直在阅读所有的问题,并尝试重置、重新设置-m等 场景:我刚刚在Master上做了一个PR,但我想把它移到一个分支继续开发,同时保持Master干净,以应对任何紧急情况 我想恢复此PR中的所有提交,同时在主控上进行一些提交。我希望保留历史记录,以便撰稿人保留其贡献的历史记录 历史按时间顺序与此完全相同: MASTER PR - merge in PR: f0d3301 (Head) | \ | \ |
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时,我需要什么命令来回滚、保留历史记录、防止上次合并提交时出现错误,并将其推回主服务器?如果您可以强制将其推回主服务器,则还原主服务器只需执行以下操作:
# reset the master branch on the remote repo to ccdad84 :
git push origin -f ccdad84:master
如果其他一些用户已经提取了master,您必须通知他们master已恢复,并引导他们将本地master分支重置为正确状态
要将本地主分支重置为ccdad84,请执行以下操作:
如果要存储PR分支机构:
git branch the/pr 62ed3e9
git push origin the/pr
如果要存储PR分支和合并提交:
git branch the/mergedpr f0d3301
git push origin the/mergedpr
你不能重写历史。如果您想在旧分支停止的地方开始一个分支,那么就这样做。我的建议是在62ed3e9处启动一个分支,然后添加一个新的commit to master,以撤销合并的效果,即与ccdad84相同 如果不管我刚才说了什么,你坚持要改写历史: 停止一切工作 将整个情况拉到本地机器上 在62ed3e9处开始分支。称之为已保存 进入主机并重置-很难达到ccdad84 用力推动两个分支。提醒所有人开始新的克隆或其他
谢谢@LeGEC,它会在8e74cf3之后保留对master的承诺吗?前两个命令是我正在寻找的,但我不知道,其余的是simpleah,我误读了:如果你想让master回滚到ccdad84,以这个提交为目标,而不是8e74cf3ok,那么它会不会没有任何PR提交,包括c56f2911 PR的首次提交?我希望主人在最后阶段,但没有任何窥探的痕迹。c56f2911不是ccdad84历史的一部分,因此它将不再在master中。等等,这将丢失历史?重置并强制推送。我们可以恢复并进行1次提交吗?谢谢@matt,我不想重写历史记录,而是在主控上恢复所有PR,在主控上添加1次提交,执行相反的代码。最后,历史已经过去,使用git push origin-f ccdad84:master强制推进origin。你说的是两件截然相反的事情。强制推覆历史。决定。我不想失去历史,但我听从了@LeGEC answer的建议。不确定我是否应该尝试恢复历史记录如果太复杂,我已经在另一个分支上有了PR代码。
git branch the/mergedpr f0d3301
git push origin the/mergedpr