我想放弃commit <commit-hash>后所做的所有更改。 于是我做了:
git reset --hard <commit-hash>
现在我想对我的遥控器做同样的事情。我该怎么做呢?我已经做了一些提交(和推)后<commit-hash>,我只是想放弃他们所有。只是在这过程中出了严重的问题我不想让事情变得更糟。;(
我基本上想把我的原点/主节点倒回到<commit-hash>
我想放弃commit <commit-hash>后所做的所有更改。 于是我做了:
git reset --hard <commit-hash>
现在我想对我的遥控器做同样的事情。我该怎么做呢?我已经做了一些提交(和推)后<commit-hash>,我只是想放弃他们所有。只是在这过程中出了严重的问题我不想让事情变得更糟。;(
我基本上想把我的原点/主节点倒回到<commit-hash>
当前回答
使用其他答案会导致不必要的局部状态丢失。本地更改本质上并不需要更改远程。如果您选择了错误的提交,这个方法仍然会破坏您的遥控器,但即使这样,您通常也可以找到正确的提交并再次尝试。
您必须在本地回购的某个地方有希望与远程匹配的提交。
不要做任何重置。 使用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'
其他回答
Sourcetree:将远程端重置为某个提交
如果你推送了一个错误的提交到你的远程(origin/feature/1337_MyAwesomeFeature),如下图所示
转到Remotes > origin > feature > 1337_MyAwesomeFeature 右键单击并选择“Delete origin/feature/1337_MyAwesomeFeature”(如果您想要备份,可以更改名称并跳过步骤4)。 点击“强制删除”和“确定”。
选择旧的提交并选择“重置当前分支到此提交” 选择你想要的模式(如果你不想要最后的改动,选择Hard),然后选择OK。
将这个commit推到一个新的origin/feature/1337_MyAwesomeFeature 您的本地特性分支和远程特性分支现在都在前面的(您选择的)提交上
对于之前的答案,我的观点是:如果
git push --force <remote> <the-hash>:<the remote branch>
仍然不工作,您可能需要编辑<your-remote-repo>。Git /配置文件的接收部分:
[receive]
#denyNonFastforwards = true
denyNonFastforwards = false
如果您的分支不是开发或生产分支,实现这一点的最简单方法是在本地重新设置某个提交,并从那里创建一个新分支。你可以使用:
git 结帐 000000
(其中000000是你想要去的提交id),然后简单地创建一个新分支:
Git远程添加[name_of_your_remote]
然后你可以创建一个新的PR,一切都将正常工作!
使用其他答案会导致不必要的局部状态丢失。本地更改本质上并不需要更改远程。如果您选择了错误的提交,这个方法仍然会破坏您的遥控器,但即使这样,您通常也可以找到正确的提交并再次尝试。
您必须在本地回购的某个地方有希望与远程匹配的提交。
不要做任何重置。 使用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'
在GitLab上,在执行此操作之前,您可能必须将分支设置为未保护状态。可以在[repo] > Settings > Repository > Protected Branches中设置。那么马克回答的方法就有用了。
git reset --hard <commit-hash>
git push -f origin master