我想放弃commit <commit-hash>后所做的所有更改。 于是我做了:

git reset --hard <commit-hash>

现在我想对我的遥控器做同样的事情。我该怎么做呢?我已经做了一些提交(和推)后<commit-hash>,我只是想放弃他们所有。只是在这过程中出了严重的问题我不想让事情变得更糟。;(

我基本上想把我的原点/主节点倒回到<commit-hash>


当前回答

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

git checkout <commit-hash>

这样做将把你送回过去,它不会影响你的项目的当前状态,你可以来到主线 Git结账主线

但是当您在参数中添加一个文件时,该文件将返回给您 从以前的时间到您当前的项目时间,即您当前的项目发生了更改,需要提交。

git checkout <commit-hash> -- 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

其他回答

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

移动你自己,即你的头到指定的提交(通过做 Git重置-硬89cef43//在这里提到你的数字) 接下来在一个随机文件中做一些更改,这样git会要求你在本地提交,然后远程提交 因此,您现在需要做的是。 应用变更后 Git commit -a -m "trial commit" 现在推动以下提交(如果已经在本地提交) 通过 Git push origin master 现在少管所要问你的是

错误:无法推送一些引用 “https://github.com/YOURREPOSITORY/AndroidExperiments.git” 提示:更新被拒绝,因为你当前分支的提示落后了 提示:它的远程对等体。集成远程更改(例如: 提示:'git pull…'),然后再推一次

所以现在你能做的就是

Git push—force origin master

因此,我希望它能起作用:)

在GitLab上,在执行此操作之前,您可能必须将分支设置为未保护状态。可以在[repo] > Settings > Repository > Protected Branches中设置。那么马克回答的方法就有用了。

git reset --hard <commit-hash>
git push -f origin master

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

git checkout <commit-hash>

这样做将把你送回过去,它不会影响你的项目的当前状态,你可以来到主线 Git结账主线

但是当您在参数中添加一个文件时,该文件将返回给您 从以前的时间到您当前的项目时间,即您当前的项目发生了更改,需要提交。

git checkout <commit-hash> -- 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

对于之前的答案,我的观点是:如果

git push --force <remote> <the-hash>:<the remote branch>

仍然不工作,您可能需要编辑<your-remote-repo>。Git /配置文件的接收部分:

[receive]
  #denyNonFastforwards = true
  denyNonFastforwards = false

使用其他答案会导致不必要的局部状态丢失。本地更改本质上并不需要更改远程。如果您选择了错误的提交,这个方法仍然会破坏您的遥控器,但即使这样,您通常也可以找到正确的提交并再次尝试。

您必须在本地回购的某个地方有希望与远程匹配的提交。

不要做任何重置。 使用git日志来查找您想要的远程的提交。使用git log -p查看变化,或者使用git log——graph——all——oneline——decoration查看紧凑的树。 复制提交的散列、标记或(如果是提示)其分支名称。 运行如下命令: Git push——force <remote> <commit-ish>:<远程分支> 如。 Git push——force origin 606fdfaa33af1844c86f4267a136d4666e576cdc:master 或 Git push——force staging v2.4.0b2:发布

如果强制推送失败,很可能是遥控器禁用了它。这可以通过临时更改receive. denynonfastforward和receive.denyDeletes中的一个或两个来解决。如果您的遥控器托管在一个没有shell访问权限的服务上,那么它可能具有您可以更改为允许强制推送的设置。


我使用一个方便的别名(git go)来查看历史记录,就像在第2步中那样,它可以像这样添加:

git config --global alias.go 'log --graph --all --decorate --oneline'