为了账号安全,请及时绑定邮箱和手机立即绑定

将远程重置为特定提交

将远程重置为特定提交

Git
UYOU 2020-02-03 13:57:45
我想放弃commit之后所做的所有更改<commit-hash>。所以我做了:git reset --hard <commit-hash>现在,我想对遥控器执行相同的操作。我怎样才能做到这一点?之后,我做了一些提交(和推送)<commit-hash>,但我只想丢弃它们。只是方式出了什么问题而已,我不想让它变得比现在更糟。;(我基本上想倒origin/master带到<commit-hash>
查看完整描述

3 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

假设您的分支master在这里和远程都被调用,并且您的远程被调用origin,则可以执行以下操作:


 git reset --hard <commit-hash>

 git push -f origin master

但是,如果其他任何人正在使用远程存储库并撤消更改,则应避免这样做。在这种情况下,最好还原不需要的提交,然后按正常方式推送。


更新:您已经在下面说明其他人撤消了您已推送的更改,因此最好创建一个新的提交以还原所有这些更改。在JakubNarębski的回答中,您对执行此操作的选择有很好的解释。哪一个最方便取决于您要还原的提交数量,以及哪种方法对您最有意义。


由于从您的问题中可以很明显地看出您已经习惯git reset --hard了重置master分支,因此您可能首先需要使用git reset --hard ORIG_HEAD来将分支移回到之前的位置。(与往常一样git reset --hard,请确保它git status是干净的,您位于正确的分支上,并且知道git reflog作为恢复显然丢失的提交的工具。)您还应该使用来检查ORIG_HEAD指向正确的提交的位置git show ORIG_HEAD。


故障排除:


如果收到类似“ ![远程拒绝] a60f7d85-> master(预接收挂钩被拒绝) ”的消息


那么您必须允许为特定分支重写分支历史记录。例如在BitBucket中,它说“不允许重写分支历史记录”。有一个Allow rewriting branch history必须选中的复选框。


查看完整回答
反对 回复 2020-02-03
?
郎朗坤

TA贡献1921条经验 获得超9个赞

如果您不介意丢失本地更改,请使用其他答案。如果您选择了错误的提交哈希值,该方法仍然会破坏您的遥控器。


如果只想使远程匹配成为本地分支中已经存在的提交,则:


千万不能做任何复位。

使用git log找到你想要的遥远,在提交。git log -p查看更改或git log --graph --all --oneline --decorate查看紧凑的树。(将最后一个作为git别名非常方便。)

复制提交的哈希值或其标记,或者复制提示的分支名称。

运行如下命令:


git push --force <remote> <commit-ish>:<the remote branch>

例如


git push --force origin 606fdfaa33af1844c86f4267a136d4666e576cdc:master

要么


git push --force staging v2.4.0b2:releases


查看完整回答
反对 回复 2020-02-03
  • 3 回答
  • 0 关注
  • 536 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信