本地master落后远程时,推送指定提交至远程master的问题
解决方案:强制推送指定提交到远程master
看起来你现在的核心问题是本地master和远程master的历史已经分叉了——之前的revert和切换提交操作让本地分支和远程走了不同的历史线,而你只想把指定的提交(要么是当前的0d0d2f,要么是97f889e)推到远程,完全不在意远程当前的状态。下面分两种场景给你具体操作步骤:
场景1:推送当前所在的提交0d0d2f到远程master
- 先确认你确实在目标提交上,执行命令查看最近的提交记录:
确保输出的第一行就是git log --oneline -n 50d0d2f开头的记录。 - 因为远程master的历史和本地不一致,普通的
git push会被拒绝,所以需要用安全强制推送命令:
这个命令会先检查远程master有没有其他人新增的提交,如果有就会中止推送(避免误覆盖别人的工作);如果你确定这个仓库只有你在操作,也可以用更直接的git push --force-with-lease origin mastergit push --force origin master。 - 为什么不能用
git pull?因为pull会把远程的提交合并到本地,这样本地的历史就会混入那些你不想保留的远程提交,而你的需求是让远程直接对齐你本地的提交,所以绝对不能执行pull。
场景2:推送指定提交97f889e到远程master
- 先切换到这个提交:
git checkout 97f889e - 直接把这个提交强制推送到远程master分支:
这里的git push --force-with-lease origin 97f889e:master97f889e:master表示“把本地的97f889e提交推送到远程的master分支”。 - 如果你想让本地的master分支也同步到这个提交,可以执行:
git checkout master git reset --hard 97f889e
重要提醒
- 强制推送会直接覆盖远程master的历史记录,如果这个仓库是多人协作的,一定要提前和团队成员沟通确认,避免破坏其他人的工作成果!
- 你遇到的
git stash提示“No local changes to save”是正常的——因为当前工作区和你所在的提交(0d0d2f)完全一致,没有未提交的修改,所以stash没有内容可以保存。
内容的提问来源于stack exchange,提问作者Ladenkov Vladislav
相关产品推荐
相关产品推荐

