我已经向远程代码仓库推送了几个提交并发现它们造成了问题。
我该如何回到之前的版本呢?也就是说,删除最近的两个提交?
因为您已经将提交推送到了远程存储库,所以最好的方法可能是回滚这两个提交,这样您就不会为任何已经从远程存储库拉取代码的人造成任何问题。
以下示例使用以下提交历史:
e512d38 Adding taunts to management.
bd89039 Adding kill switch in case I'm fired.
da8af4d Adding performance optimizations to master loop.
db0c012 Fixing bug in the doohickey
如果你只想还原提交而不修改历史记录,可以执行以下操作:
git revert e512d38
git revert bd89039
如果你不想让别人看到你添加了紧急停止开关,然后又将其删除,你可以使用以下方法回滚存储库(但是,这会给那些已经从远程拉取了你的更改的其他人带来问题):
git reset --hard da8af4d
git push origin -f localBranch:remoteBranch
其中localBranch
是本地分支的名称,remoteBranch
是远程分支的名称。
我认为你可以在本地进行回滚并推送结果:
$ git reset HEAD^ --hard
$ git push REMOTE -f
其中'REMOTE'为远程名称。
git revert
。另一方面,也可能存在完全不同的动机(如David M. Syzdek的回答)。在某些情况下,没有好的解决方案,只有最不坏的一个(这取决于具体情况)。 - torek首先输入此命令。
git log -n 4
这个命令将显示您最近的4个提交及其SHA。在此之后输入以下命令。
git rebase -i SHA_ID
不要输入SHA_ID类型,而是输入您想要删除的提交之前的提交的SHA。
然后会打开一个文件,在该文件的顶部,您将看到您想要删除的提交的SHA和消息。删除此行并保存并退出文件。
完成此操作后,您必须进行推送。因此,请键入以下命令。
git push -f origin master
完成后,您可以看到您的提交已被删除。
git push origin -f last_good_commit:yourEditingBranch
最后一个好的提交将成为分支的新Head。然后在本地执行硬重置:
git reset origin/yourEditingBranch
git reset --hard
将撤销工作树中的任何本地修改,包括那些不属于有问题的提交。如果有疑问,建议先备份该工作树(快速使用tar
命令即可)。 - sxc731git push origin -f localBranch:remoteBranch
命令时遇到了困难,因为我一直在输入main:remote
,但它并没有起作用。实际上,你需要输入git push origin -f main:main
来覆盖 Github 上的主分支。现在看来很明显,但我花了一段时间才弄清楚这个问题。 - Ezequiel Barbosa