撤销 Git 的最后一次提交并保存到另一个分支

10
有没有一种方法可以回滚最近的提交并将其放入一个单独的分支以供后续测试?我做了一些更改,不想完全抛弃它们,我只想将它们保留在不同的分支中进行进一步的测试。
有人能帮我吗?
3个回答

19

是的,您可以做到这一点 - 从当前分支分支并创建一个新分支以保留提交记录,然后切换回原始分支,再在原始分支中回滚提交。

因此,从您的当前分支(我们称其为current)创建并检出一个名为separate的新分支。

git checkout -b separate

这将会创建一个新分支separate,该分支将拥有新的提交记录。现在回到原本的分支。

git checkout current

您可以在此分支上回滚最后一次提交

git reset --hard HEAD~1

如果您想要访问之前的提交,您需要执行 git checkout separate 命令,并且该提交应该会在该分支中可用。


1
anash0l 这种方法在本地运行良好,但是当我尝试推送到 GitHub 时却无法通过...你有什么想法我可能遗漏了什么? - Mo J. Mughrabi
@MoJ.Mughrabi 在执行这些操作之前,您是否已经将代码推送到 Github?其他人是否可能已经拉取了更改? - Anshul Goyal
@anash0l 是的,我这样做了,但是我的部署脚本尝试拉取它们时却看不到新的还原操作。因为我使用了“push -f”将更改推送到 GitHub。 - Mo J. Mughrabi
@MoJ.Mughrabi 好的,你想要推送分支 separate 吗?如果是的话,请执行 git push origin separate。这样就会在 GitHub 上创建一个名为 separate 的新分支。 - Anshul Goyal

4
你可以通过两步操作完成此操作,无需在分支之间切换。来吧!
  1. Create a new branch from the current branch, to set aside your current state:

    git branch feature_maybe
    
  2. Revert the last commit in the current branch:

    git reset --hard HEAD^
    

0

是的 - 使用 git checkout -b <新分支名称> 检出一个新分支,使用 git checkout <原始分支名称> 切换回原始分支,然后使用 git reset --hard HEAD~1 将原始分支移回一个提交。 (在移动分支时,最好使用像 gitk 这样的程序逐步可视化您正在执行的操作。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接