Git操作:用本地最新提交替换远程Origin的指定Commit
问题解答
咱们一步步来解决你的问题哈:
1. 不用拉取,直接用本地提交替换远程分支
完全可以!不过因为远程分支比本地多了一个你不需要的提交,常规的git push会被Git拒绝(毕竟Git默认不允许随便覆盖远程的提交历史)。这时候你需要用强制推送,让远程分支直接回到你本地的commit nr 10状态。
执行命令就行:
git push origin <你的分支名称> --force
⚠️ 敲黑板提醒下:强制推送会彻底覆盖远程分支的历史,如果这个分支有其他小伙伴在协作,他们的本地仓库会和远程产生冲突,一定要确认没人依赖那个你要丢弃的远程提交再操作哦。如果是个人仓库或者只有你自己用的分支,放心冲就好。
2. 拉取时自动用本地版本解决冲突,或是删除远程多余提交的方法
方法一:拉取时自动用本地版本搞定所有冲突
如果你确实要执行git pull,但想让Git自动用本地版本解决所有冲突,可以用带-X ours参数的拉取命令:
git pull -X ours origin <你的分支名称>
这里的-X ours意思是,合并时只要遇到冲突的文件,直接用本地的版本覆盖;非冲突的文件会正常合并远程的修改。不过这种方法会保留远程的提交历史(只是冲突部分用本地版),如果你想彻底丢掉远程的那个多余提交,其实强制推送更直接。
方法二:重置本地分支再强制推送(更直观)
要是你不小心拉了远程提交,或者想更明确地让远程回到commit nr 10,也可以先把本地分支重置到commit nr 10,再强制推送:
# 重置本地分支到commit nr 10(如果本地已经是这个状态,这步可以跳过) git reset --hard <commit nr 10的哈希值> # 强制推送到远程 git push origin <你的分支名称> --force
方法三:删了远程分支再重新推本地分支
还有个更直接的办法:先删掉远程的目标分支,再把本地分支推上去:
# 删除远程分支 git push origin --delete <你的分支名称> # 重新推送本地分支到远程 git push origin <你的分支名称>
效果和强制推送一样,同样要注意协作场景下的影响哈。
内容的提问来源于stack exchange,提问作者Daarwin
相关产品推荐
相关产品推荐

