【git】用远程仓库的代码覆盖本地版本

在使用 Git 拉取(git pull)后,如果你在 Visual Studio 工程中遇到代码冲突,并且你 希望用远程仓库里的代码完全覆盖本地文件(也就是放弃本地改动,以远程代码为准),可以按照下面的操作进行。


用远程仓库的代码覆盖本地版本

✅ 场景目标:

Git 拉取后发现有冲突,不想处理冲突,想直接用远程仓库的代码覆盖本地版本(即放弃本地所有冲突文件的更改)


🔧 方法一:使用 git checkout --theirs(仅适用于有冲突的文件)

当你遇到冲突时,Git 会标记冲突文件,此时执行:

git checkout --theirs .

含义是:把所有冲突文件都还原为远程仓库(“他们”的版本)内容。

然后再执行:

git add .
git commit -m "使用远程版本解决冲突"

我的实操

zhangbin@LAPTOP-Y9KP MINGW64 /d/XTRANS/thunderbolt/ayame/zhb-bifrost (main|REBASE 1/1)
$ git checkout --theirs .
error: path 'player-only/echo/SimSession.cpp' does not have their version
error: path 'player-only/worker/src/fargo/SimSession005.cpp' does not have their version

zhangbin@LAPTOP-Y9KP MINGW64 /d/XTRANS/thunderbolt/ayame/zhb-bifrost (main|REBASE 1/1)
$


🔨 方法二:强制重置本地分支到远程版本(彻底放弃所有本地改动)

⚠️ 警告:这种方式会彻底丢弃本地的所有未提交内容,慎用!

  1. 放弃所有未提交更改(包括冲突状态):
git reset --hard
  1. 强制将本地分支同步为远程分支的最新状态:
git fetch --all
git reset --hard origin/你的分支名

比如当前在 main 分支:

git reset --hard origin/main
  1. 如果你在 Visual Studio 中,之后可以重新打开 .sln 工程,进行 Build/Run。

我的实操


zhangbin@LAPTOP-Y9KP MINGW64 /d/XTRANS/thunderbolt/ayame/zhb-bifrost (main|REBASE 1/1)
$ git reset --hard
HEAD is now at 4978431e 会一直不停的SIM_CONNECT(send_connect_ack)发送ack和tcp connected循环中

zhangbin@LAPTOP-Y9KP MINGW64 /d/XTRANS/thunderbolt/ayame/zhb-bifrost (main|REBASE 1/1)
$ git fetch --all

zhangbin@LAPTOP-Y9KP MINGW64 /d/XTRANS/thunderbolt/ayame/zhb-bifrost (main|REBASE 1/1)
$ git reset --hard origin/main
HEAD is now at 4978431e 会一直不停的SIM_CONNECT(send_connect_ack)发送ack和tcp connected循环中

zhangbin@LAPTOP-Y9KP MINGW64 /d/XTRANS/thunderbolt/ayame/zhb-bifrost (main|REBASE 1/1)
$

💡 方法三:只用某个文件/目录覆盖

如果你只想让某个文件或文件夹使用远程仓库的内容覆盖本地,比如:

git checkout origin/main -- path/to/file_or_folder

✅ 最终建议

情况推荐方法
只想解决几个冲突文件方法一
完全不管本地,全部重来方法二(更彻底)
只想恢复个别文件方法三

如果你用的是 VS 的 Git 插件界面操作,可以也手动解决冲突后点“接受远程更改”,但推荐还是用命令行控制最稳。

如需帮你具体分析某次冲突,贴下 git status 和冲突文件内容我可以进一步帮你判断。


二、已经 reset 了代码,Git 依然记录 rebase metadata

你执行了:

git reset --hard origin/main

但终端显示仍在:

(main|REBASE 1/1)

说明虽然你重置了 HEAD,但 Git 仍然认为你处于一次未完成的 rebase 状态


🧯 问题核心:

你重置了代码文件,但 .git 目录中的 rebase 状态文件还在,所以 Git 仍认为你正在 rebase


✅ 解决方案:清除 rebase 状态

执行以下命令来中止当前 rebase 操作

git rebase --abort

即使你已经 reset 了代码,Git 依然记录 rebase metadata,所以 --abort 是清除它的正确方式。


我的实操
zhangbin@LAPTOP-Y9KP MINGW64 /d/XTRANS/thunderbolt/ayame/zhb-bifrost (main|REBASE 1/1)
$ git rebase --abort

如果仍不行(极少情况)

你可以手动删除 rebase 的元数据:

rm -rf .git/rebase-apply
rm -rf .git/rebase-merge

然后用 git status 验证是否恢复正常。


🎯 最后验证

git status

应该显示:

On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

如果这样,就是彻底恢复正常状态了。


需要我帮你检查 .git/rebase-merge 里是否还残留了 rebase 信息的话,你也可以贴一下相关目录结构或内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等风来不如迎风去

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值