我的仓库现在有100个提交。我需要回滚仓库以提交80个,并删除所有后续的提交。
为什么?
这个repo应该是用于来自其他用户的合并。由于过度编辑,我提交了一堆合并。这是由于我的远程分支的错误标签,其中3个开发人员被标记为彼此。我需要重置到那个点,然后向前拉。
我想重定基,就像这个例子:How can I remove a commit on GitHub?
但是,git希望我做大量的冲突管理,有没有更简单的方法?
我的仓库现在有100个提交。我需要回滚仓库以提交80个,并删除所有后续的提交。
为什么?
这个repo应该是用于来自其他用户的合并。由于过度编辑,我提交了一堆合并。这是由于我的远程分支的错误标签,其中3个开发人员被标记为彼此。我需要重置到那个点,然后向前拉。
我想重定基,就像这个例子:How can I remove a commit on GitHub?
但是,git希望我做大量的冲突管理,有没有更简单的方法?
7条答案
按热度按时间gywdnpxw1#
注意:如下面的注解所示,在协作环境中使用此选项是危险的:你在改写历史
oyjwcjzk2#
要撤销最近的提交,我这样做:
第一:
获取要撤消的最新SHA ID。
这将创建一个新的提交,它的作用与你的提交完全相反。然后你可以推送这个新的提交,使你的应用恢复到之前的状态,你的git历史将相应地显示这些变化。
这对于立即重做您刚刚提交的内容很有帮助,我发现这对我来说更常见。
就像迈克说的,你也可以这样做:
xzv2uavs3#
另一种方式:
checkout 你想要还原的分支,然后将你的本地工作副本重置回你想要成为远程服务器上最新的一个的提交(之后的所有东西都将拜拜)。为了做到这一点,在SourceTree中,我右键单击并选择“将BRANCHNAME重置为该提交”。
然后导航到存储库的本地目录并运行以下命令:
这将清除本地仓库中当前提交之后的所有提交,但仅限于该分支。
ee7vknir4#
大多数建议都假设你需要以某种方式销毁最后20次提交,这就是为什么它意味着“重写历史”,但你不必这样做。
只需从提交#80创建一个新的分支,并在该分支上继续工作。其他20个提交将留在旧的孤立分支上。
如果你真的希望你的新分支有相同的名字,记住分支基本上只是标签。只要把你的旧分支重命名为其他东西,然后在提交#80时用你想要的名字创建新分支。
8yoxcaq75#
当从master更新分支时,我注意到我有时候会过度点击,导致分支也合并到master中。找到了一种方法来撤销它。
如果你的上一次提交是一个合并,那么你需要多一点爱心:
git revert -m 1 HEAD
ql3eal8s6#
在github中,简单的方法是在github UI中的branches选项卡下删除远程分支。您必须确保删除以下设置以使分支可删除:
1.不是默认分支
1.没有开放投票请求。
1.分支不受保护。
现在在你的本地仓库中重新创建它,指向上一个提交点,并将它添加回远程仓库。
然后将本地分支推送到远程
添加回默认分支和分支保护等
jq6vz3qz7#
切换分支:(注1)
本地回退:
此命令仅删除指定commitID之后的提交日志,同时保留对代码所做的更改。
或者
此命令完全删除在指定的commitID之后所做的更改,有效地将代码恢复到其先前状态。
同步远程资料库:(注2)
(Note 2)如果遇到错误“fatal:无法访问'https://github.com/xxxxx/xxxxxxx.git/':OpenSSL SSL_读取:Connection was reset,errno 10054”,这可能是由于服务器的SSL证书未被第三方签名。要解决此问题,您可以在Git Bash中输入
git config --global http.sslVerify "false"
禁用SSL验证,然后再次尝试该操作。*