9阅网

您现在的位置是:首页 > 知识 > 正文

知识

git - Git恢复多个提交,包括1次合并,并全部推送到原点。

admin2022-11-07知识16

我知道有一大堆类似的问题,但还是找不到答案,我一直在看所有的问题,并尝试了重置、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分支重置到正确的状态。


要重置你的本地 masterccdad84 :

# 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 相同。


如果尽管我刚才说了,你还是坚持要重写历史。

  1. 停止所有工作

  2. 把整个情况拉到你的本地机器上。

  3. 在62ed3e9开始一个分支。叫它 saved.

  4. 上主人, reset --hard 到cdad84。

  5. 强行推送两个分支。提醒大家开始新的克隆什么的。