Git还原多个提交,包括1个合并,以及所有在源上推送的提交

Git还原多个提交,包括1个合并,以及所有在源上推送的提交,git,Git,我知道有很多类似的问题,但仍然找不到答案,我一直在阅读所有的问题,并尝试重置、重新设置-m等 场景:我刚刚在Master上做了一个PR,但我想把它移到一个分支继续开发,同时保持Master干净,以应对任何紧急情况 我想恢复此PR中的所有提交,同时在主控上进行一些提交。我希望保留历史记录,以便撰稿人保留其贡献的历史记录 历史按时间顺序与此完全相同: MASTER PR - merge in PR: f0d3301 (Head) | \ | \ |

我知道有很多类似的问题,但仍然找不到答案,我一直在阅读所有的问题,并尝试重置、重新设置-m等

场景:我刚刚在Master上做了一个PR,但我想把它移到一个分支继续开发,同时保持Master干净,以应对任何紧急情况

我想恢复此PR中的所有提交,同时在主控上进行一些提交。我希望保留历史记录,以便撰稿人保留其贡献的历史记录

历史按时间顺序与此完全相同:

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