如何将git仓库回滚到特定的commit?

5w9g7ksd  于 2023-03-28  发布在  Git
关注(0)|答案(7)|浏览(139)

我的仓库现在有100个提交。我需要回滚仓库以提交80个,并删除所有后续的提交。
为什么?
这个repo应该是用于来自其他用户的合并。由于过度编辑,我提交了一堆合并。这是由于我的远程分支的错误标签,其中3个开发人员被标记为彼此。我需要重置到那个点,然后向前拉。
我想重定基,就像这个例子:How can I remove a commit on GitHub?
但是,git希望我做大量的冲突管理,有没有更简单的方法?

gywdnpxw

gywdnpxw1#

git reset --hard <old-commit-id>
git push -f <remote-name> <branch-name>

注意:如下面的注解所示,在协作环境中使用此选项是危险的:你在改写历史

oyjwcjzk

oyjwcjzk2#

要撤销最近的提交,我这样做:
第一:

git log

获取要撤消的最新SHA ID。

git revert SHA

这将创建一个新的提交,它的作用与你的提交完全相反。然后你可以推送这个新的提交,使你的应用恢复到之前的状态,你的git历史将相应地显示这些变化。
这对于立即重做您刚刚提交的内容很有帮助,我发现这对我来说更常见。
就像迈克说的,你也可以这样做:

git revert HEAD
xzv2uavs

xzv2uavs3#

另一种方式:
checkout 你想要还原的分支,然后将你的本地工作副本重置回你想要成为远程服务器上最新的一个的提交(之后的所有东西都将拜拜)。为了做到这一点,在SourceTree中,我右键单击并选择“将BRANCHNAME重置为该提交”。
然后导航到存储库的本地目录并运行以下命令:

git -c diff.mnemonicprefix=false -c core.quotepath=false push -v -f -- tags REPOSITORY_NAME BRANCHNAME:BRANCHNAME

这将清除本地仓库中当前提交之后的所有提交,但仅限于该分支。

ee7vknir

ee7vknir4#

大多数建议都假设你需要以某种方式销毁最后20次提交,这就是为什么它意味着“重写历史”,但你不必这样做。
只需从提交#80创建一个新的分支,并在该分支上继续工作。其他20个提交将留在旧的孤立分支上。
如果你真的希望你的新分支有相同的名字,记住分支基本上只是标签。只要把你的旧分支重命名为其他东西,然后在提交#80时用你想要的名字创建新分支。

8yoxcaq7

8yoxcaq75#

当从master更新分支时,我注意到我有时候会过度点击,导致分支也合并到master中。找到了一种方法来撤销它。
如果你的上一次提交是一个合并,那么你需要多一点爱心:
git revert -m 1 HEAD

ql3eal8s

ql3eal8s6#

在github中,简单的方法是在github UI中的branches选项卡下删除远程分支。您必须确保删除以下设置以使分支可删除:
1.不是默认分支
1.没有开放投票请求。
1.分支不受保护。
现在在你的本地仓库中重新创建它,指向上一个提交点,并将它添加回远程仓库。

git checkout -b master 734c2b9b   # replace with your commit point

然后将本地分支推送到远程

git push -u origin master

添加回默认分支和分支保护等

jq6vz3qz

jq6vz3qz7#

git log

切换分支:(注1)

git checkout branch_name

本地回退:

git reset --soft commitID

此命令仅删除指定commitID之后的提交日志,同时保留对代码所做的更改。
或者

git reset --hard commitID

此命令完全删除在指定的commitID之后所做的更改,有效地将代码恢复到其先前状态。
同步远程资料库:(注2)

git push origin HEAD --force
  • (注1)Git会提示你在切换分支之前提交或隐藏你的更改。如果你试图切换到另一个分支而没有提交你的更改,你会被提示“请在切换分支之前提交你的更改或隐藏它们”。但是,如果你还没有完成当前分支的功能开发,提交可能会感觉不完整。在这种情况下,你可以使用“git stash”命令来隐藏修改过但未提交的代码。这会将代码恢复到上次提交的状态,而不会显示修改过的代码。当你返回到你正在处理的分支时,你可以使用“git stash pop”命令来恢复隐藏的代码。

(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验证,然后再次尝试该操作。*

相关问题