git - 使远程分支 5 次提交
问题描述
我已经提交并推动了分支。现在我决定恢复最后两次提交,我知道我可以做到git reset --hard HEAD~2
,而且我做到了。现在在我的本地分支中,提交向后退了两步。但是我怎样才能把它推送到远程分支呢?我的意思是如何使远程分支也成为 2 次提交?
我问的原因是,在我做了上面的本地恢复之后,我更改了代码并提交了。当我推送到远程仓库时,我收到了拒绝错误:
Updates were rejected because the tip of your current branch is behind
==== 更新 ====
我尝试了@Tim Biegeleisen 的回答,git revert --no-commit HEAD~5..
但得到了错误:
error: commit d7f37d67f8dbdaecc534c06316b7417657e527 is a merge but no -m option was given. fatal: revert failed
远程分支显示最新提交是“合并分支 'foo' of ...”
解决方案
鉴于您的分支是公共和共享的,您可能不应该进行硬重置来实际删除前 2 个提交。相反,使用git revert
:
git revert master~2..master
或者可能
git revert --no-commit HEAD~2..
HEAD
这将在您的分支顶部添加一个新提交master
,这将在功能上撤消当前的前 2 个提交。请注意,这些提交仍然存在,这意味着任何拉取的人都会得到一个新的提交。
编辑:
根据您的评论和错误消息,两个提交之一似乎是合并提交。这意味着您需要告诉 Git 在执行还原时要遵循两个父项中的哪一个。我不知道有一种方法可以在具有一系列提交的单个命令中执行此操作,但我们可以尝试进行两次单独的还原。假设 HEAD 指向合并提交:
git revert -m 1 abc123 # or use -m 2 to follow the other parent
这abc123
是 HEAD 提交的 SHA-1 哈希,您可以使用git log
. 然后,为第二次提交进行第二次还原:
git revert xyz345
推荐阅读
- java - 如何更改 JTable 的空白空间颜色?
- jquery - 我想使用 jquery 在静态表上进行无限滚动
- typescript - VS2019/TypeScript 3.9.5/智能故障
- javascript - D3 树图 v3 到 v4
- flutter - 带参数调用的方法和不带参数调用的方法的区别
- glsl - 假设未设置的 sampler2D 制服将读取纹理单元 0 是否安全?
- pandas - 在 pandas 中添加基于 groupby 映射的新列
- javascript - 如何在 Javascript 中使用流和 JWT 下载大文件?
- node.js - 在哪里托管我的 NodeJS 驱动的 socket.io API?
- visual-studio - 当我在 Visual Studio 的同一个项目中有多个文件时,如何选择要运行的文件并在终端中查看其预览?