首页 > 解决方案 > 如何提取分支的最后几个提交并重置为以前的某个提交?

问题描述

我连续几次提交都搞砸了。

我想做的是:

  1. 提取最后几个提交到特定分支
  2. 将 master 恢复为正常提交
  3. 仔细修复该分支 (p1) 中的更改并不断将它们添加回主控。

它会解决问题吗?如果可以,如何实施这个计划?

标签: git

解决方案


你的回购看起来像这样。

A - B - C - D [master]

假设 C 和 D 是您不希望在 master 上的提交。

首先,在与 master 相同的提交上创建一个新分支。

$ git branch feature

A - B - C - D [master]
              [feature]

然后用 将 master 移回git resetB。

$ git reset --hard B

A - B [master]
     \ 
      C - D [feature]

现在您可以签出并处理功能。


如果您没有重置并恢复怎么办?与移动分支标签的 reset 不同,revert 进行新的提交。

我们像以前一样开始。

A - B - C - D [master]

和以前一样,我们创建一个新分支来记住我们想要处理的提交。

$ git branch feature

A - B - C - D [master]
              [feature]

我们没有移动 master 以使其不再包含有问题的提交,而是使用 revert 向 master 添加一个新的提交,该提交撤消了 C 和 D。

$ git revert C D

A - B - C - D [feature]
             \
              ^D - ^C [master]

master 的内容将与提交 B 相同,但历史记录会更混乱。您通常不希望保留开发过程的工件,例如还原和简单的错字修复,它们对未来的开发人员没有用处,并使历史更难以理解。

因此,我建议将 revert 留给深埋的提交。


推荐阅读