作为一个初级git用户,我被一个艰难的合并所淹没,一定做错了.我最终在我的源文件中提交了一堆乱七八糟的垃圾解决方案.提交显示了许多看起来像<<<<<<< HEAD和的行的添加>>>>>>> a7b4de79431c2e73d28621c72c8d14820df1a24b.提交已经被推送到远程源,所以我不幸只能修改提交.
我想将远程存储库回滚到最后一次良好的提交,4a3ba7b0e56cf0be80274c1f879029220a889bde并且(如果可能的话)销毁错误的提交d004651972cbc35f70ee5a2145b6e03169c77279.
我试过了:
git checkout 4a3ba7
git push -f
Run Code Online (Sandbox Code Playgroud)
得到了: fatal: You are not currently on a branch.
log*_*yth 24
checkout将当前工作目录移动到先前的提交,但它不会修改分支内容.您需要将分支重置为旧提交,然后推送它.
git checkout ...
git reset --hard 4a3ba7
git push -f
Run Code Online (Sandbox Code Playgroud)
也就是说,如果您只是push -f要更改最近的提交,那么您应该可以使用--amend.
git checkout ...
// Fix the file
git commit --amend
git push -f
Run Code Online (Sandbox Code Playgroud)
如果在此之后至少有一些您想要的更改,4a3ba7那么您也可以这样做:
git checkout ...
git reset 4a3ba7
git add -p
// Use the interactive prompt to choose the parts you want
git commit
git push -f
Run Code Online (Sandbox Code Playgroud)
您的错误remote: error: denying non-fast-forward refs/heads/master是因为您使用的git服务器Assembla默认情况下不允许重写历史记录.请参阅此答案以修复该部分:撤消git push到Assembla
Mar*_*nde 11
您不需要在本地检查事物以回放远程分支; 你可以使用
git push -f origin 4a3ba7b0:master
Run Code Online (Sandbox Code Playgroud)
当然,在执行任何操作之前,请仔细检查您的日志,因为此推送将覆盖远程数据.
如果收到权限错误,receive.denyNonFastForwards可能会true在远程存储库中设置; 你必须改变它,以便在任何情况下都可以倒带.