Git 将remote倒带到以前的提交

Git 将remote倒带到以前的提交,git,Git,作为一名初级git用户,我被一次艰难的合并弄得不知所措,一定是做错了什么。我最终在提交冲突解决方案时,源文件中有一大堆垃圾。提交显示了许多行的添加,这些行看起来像是a7b4de79431c2e73d28621c72c8d14820df1a24b。提交已经被推送到远程源,所以很遗憾,我不能只发送提交 我想将远程存储库倒带到最后一次正确提交,4a3ba7b0e56cf0be80274c1f879029220a889bde,并(如果可能)销毁错误提交d004651972cbc35f70ee5a2145

作为一名初级git用户,我被一次艰难的合并弄得不知所措,一定是做错了什么。我最终在提交冲突解决方案时,源文件中有一大堆垃圾。提交显示了许多行的添加,这些行看起来像是a7b4de79431c2e73d28621c72c8d14820df1a24b。提交已经被推送到远程源,所以很遗憾,我不能只发送提交

我想将远程存储库倒带到最后一次正确提交,
4a3ba7b0e56cf0be80274c1f879029220a889bde
,并(如果可能)销毁错误提交
d004651972cbc35f70ee5a2145b6e03169c77279

我试过:

git checkout 4a3ba7
git push -f

并得到:
致命:您当前不在分支上。
签出
将当前工作目录移动到上一个提交,但不会修改分支内容。您需要将分支重置回一个旧的提交,然后推送它

git checkout ...
git reset --hard 4a3ba7
git push -f
也就是说,如果您已经
push-f
ing只更改最近的提交,那么您应该能够使用
--amend

git checkout ...
// Fix the file
git commit --amend
git push -f
如果在
4a3ba7
之后提交了至少一些您想要的更改,那么您也可以执行以下操作:

git checkout ...
git reset 4a3ba7
git add -p
// Use the interactive prompt to choose the parts you want
git commit
git push -f
更新 您的错误
remote:error:拒绝非快进引用/heads/master
是因为您正在使用的git服务器Assembla默认不允许重写历史记录。有关修复该部分的信息,请参见以下答案:

您可以执行以下操作

git reset --hard *commithash* 

但请注意:这可能会导致修改后的数据丢失!(您已被警告:)

您不需要在本地签出内容来回放远程分支;你可以用

git push -f origin 4a3ba7b0:master
当然,在执行任何操作之前,请仔细检查日志,因为此推送将覆盖远程数据


如果收到权限错误,
receive.denynonfastforts
可能会在远程存储库中设置为
true
;在任何情况下,您都必须更改此设置才能使倒带正常工作。

错误:无法将某些引用推送到
。`更新被拒绝,因为当前分支的尖端落后于远程副本。
错误:无法将某些引用推送到
。`更新被拒绝,因为当前分支的尖端落后于远程副本。Kivin您运行了哪些命令?你们在回购协议中还有其他分支机构吗?只要里面有
-f
,我就不希望这样。只有远程和本地的分支是master。我只运行了您答案中的第一个代码块:checkout master,reset--hard 4a3ba7,push-f。我现在在stdout上得到了以下信息:@Kivin您要推到的服务器是什么?听起来服务器设置为不允许重写历史记录。如果这是真的,那么你可以只做一个新的提交来修复合并冲突,而不是试图返回并从历史中完全删除它。如果我不能破坏坏的提交,我可以重写它的提交消息以更好地反映它的坏消息吗?我怎样才能使我的本地回购协议与
4a3
相匹配,并且我可以提交?我认为这是更好的答案。在重写远程历史记录时,不应该乱动本地副本。