在保留提交的同时将 master 恢复为旧提交

Posted

技术标签:

【中文标题】在保留提交的同时将 master 恢复为旧提交【英文标题】:Revert master to old commit while preserving commits 【发布时间】:2015-01-03 00:30:34 【问题描述】:

这就是我的提交历史的样子(所有内容都已推送到存储我的 repo 的 Github,但我是唯一的贡献者):

                           master       
                             |
..-c100-c101-c102-c103-...-c150

我需要将master 恢复为c100 提交,同时保留 剩余的提交(即:c101-c102...-c150),我不想松开它们。

所以这就是我想出的:

git checkout -b new-branch # Set up branch containing all commits
git checkout master        # Go back to master
git revert <c-100>         # Revert master branch to c-100 commit

这将(希望)导致:

   master
     |
..-c100-c101-c102-c103-...-c150
                             |
                        new-branch

理想情况下,我会向 master 提交一些提交,然后保持不变,直到我可以将新分支合并到其中。

这是正确的做法吗?


添加

刚刚试了一下,使用git revert &lt;SHA&gt; 不起作用,它只会恢复那个提交。

【问题讨论】:

git revert != snv revert。听起来您需要执行 git reset --hard c100 然后强制推送。 SO上有很多关于这个的其他线程 我刚刚尝试了我的问题中的命令,但它不起作用,它只是恢复了 that 提交,它没有将master 恢复到原来的状态在那次提交上。所以我猜你是对的。 【参考方案1】:

这是完全正常的。您也可以在要提交的提交的尖端设置一个标签。

【讨论】:

【参考方案2】:

答案是(如here 所述)使用:

git revert --no-commit c-100..HEAD
git commit

【讨论】:

以上是关于在保留提交的同时将 master 恢复为旧提交的主要内容,如果未能解决你的问题,请参考以下文章

我如何恢复 `git fetch 上游; git 合并上游/master`? [复制]

完全恢复拉取请求

sh 将所有未提交的更改移动到新分支,并将现有分支恢复为HEAD。“master”具有未提交的更改。你决定了

github怎样清除历史提交,保留最新提交

将推送的分支恢复为具体的提交

你如何恢复错误的 git 合并提交