将遥控器重新设置为某个提交

我想丢弃所有在提交<commit-hash>后做的修改。 所以我这么做了。

git reset --hard <commit-hash>

现在我想对我的远程系统做同样的事情。我怎样才能做到这一点?我在<commit-hash>之后做了一些提交(和推送),我只想把它们全部抛弃。只是有些地方出了*大的差错,我不想让它变得更糟。

我基本上想把我的 "origin/master "倒退到""。

对该问题的评论 (2)
解决办法

假设你的分支在这里和远程都被称为 "master",而你的远程被称为 "origin",你可以这样做。

 git reset --hard 
 git push -f origin master

但是,如果有其他人正在使用你的远程仓库,并且拉出了你的修改,你应该避免这样做。 在这种情况下,最好是 revert 你不想要的提交,然后正常推送。

更新:你在下面解释了其他人已经拉取了你推送的修改,所以最好创建一个新的提交来恢复所有这些修改。 在[Jakub Narębski的回答](https://stackoverflow.com/questions/1463340/revert-multiple-git-commits/1470452#1470452)中,对你这样做的选择有一个很好的解释。 哪种方法最方便,取决于你想恢复多少个提交,以及哪种方法对你最有意义。

从你的问题中可以看出,你已经用git reset --hard重置了你的master分支,你可能需要先用git reset --hard ORIG_HEAD把你的分支移回原来的位置。 (在使用 "git reset --hard "时,请确保 "git status "是干净的,你在正确的分支上,并且你知道 "git reflog "是一个恢复明显丢失的提交的工具。) 你还应该用git show ORIG_HEAD来检查ORIG_HEAD是否指向正确的提交。

故障排除:

如果你收到一条类似"![remote rejected] a60f7d85 -> master(pre-receive hook declined)&quot。

那么你必须允许对特定分支的历史进行重写。以BitBucket为例,它说"不允许重写分支历史"。有一个名为 "允许重写分支历史 "的复选框,你必须选中。

评论(12)

如果你不介意丢失本地修改,请使用其他答案。如果你选择了错误的提交哈希值,这种方法仍然会破坏你的远程。

如果你只是想让远程的提交与已经在本地分支中的提交相匹配。

1.不要***做任何重设。 1.使用git log找到你希望远程提交的哈希值。git log -p查看修改,或者git log --graph --all --oneline --decorate查看一个紧凑的树。(在你的shell中把最后一项作为别名是非常方便的。) 1.复制哈希值。 1.运行一个命令,比如。

    git push --force   :

比如说

    git push --force origin 606fdfaa33af1844c86f4267a136d4666e576cdc:master
评论(11)

我通过这个命令解决了像你这样的问题。

git reset --hard  
git push -f  : 
评论(0)

在GitLab上,你可能需要先将你的分支设置为不受保护。 你可以在 [repo] > 设置 > Repository > 受保护的分支。 那么Mark'答案中的方法就可以了。

git reset --hard 
git push -f origin master
评论(0)

如果你想要以前版本的文件,我建议使用git checkout。

git checkout 

这样做会让你回到过去,它不会影响你的项目的当前状态,你可以来主线 git checkout mainline

但当你在参数中添加一个文件时,该文件会被带回给你 从之前的时间到您当前的项目时间,也就是说......您当前的项目发生了变化,需要承诺。 您当前的项目发生了变化,需要提交。

git checkout  -- file_name
git add .
git commit -m 'file brought from previous time'
git push

这样做的好处是,它不会删除历史记录,也不会恢复特定的代码变化(git revert)。

点击这里查看更多https://www.atlassian.com/git/tutorials/undoing-changes#git-checkout

评论(1)

对于前面的回答,我的两点意见。 如果

git push --force  :

还是不行,你可能需要编辑<你的远程repo>.git/config文件'的接收部分。

[receive]
  #denyNonFastforwards = true
  denyNonFastforwards = false
评论(0)

如果你的分支不是开发或生产分支,最简单的方法是在本地重置到某个提交,然后从那里创建一个新的分支。 你可以使用

git checkout 000000

(其中 000000 是您想去的提交 ID),然后简单地创建一个新分支。

git remote add [name_of_your_remote]

然后你可以创建一个新的PR,一切都会好起来的!

评论(0)

做一件事 获取提交的SHA号。 如87c9808,然后。

  1. 把你自己,也就是你的头移到指定的提交处(通过执行 git reset --hard 89cef43//请在此注明您的编号 )
  2. 接下来在一个随机的文件中做一些修改,这样git会要求你在本地提交,然后再远程提交。 因此,你现在需要做的是。 申请变更后 git commit -a -m "审判提交&quot。

  3. 现在推送以下提交(如果已经在本地提交的话 由 git push origin master

  4. 现在,Git会向你提出以下要求

错误。 未能将一些裁判推送到 'https://github.com/YOURREPOSITORY/AndroidExperiments.git&#39。 提示。 更新被拒绝的原因是你当前分支的提示在后面。 提示: 其远程对应的。 整合远端的变化(如 提示:在再次推送之前,先整合远程的变化(例如 'git pull ...')再推送。

  1. 因此,现在你可以做的是

git push --force origin master

  1. 因此,我希望它的工作:)
评论(0)