You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Git仓库中无意变更的Ruby Gem目录恢复至Origin状态?

解决Git意外捕获Ruby Gem子模块变更的问题

首先,从你给出的git status输出里的(new commits)标记来看,这个api/gems/file_service大概率是一个Git子模块,而不是普通的文件/目录。子模块的变更需要单独处理,这就是你之前用git pull --rebase master和git fetch没解决问题的原因。下面分两种情况给你对应的解决方法:

情况1:这确实是一个需要保留的子模块

如果这个Gem是作为子模块引入的,你只需要把它重置回远程仓库的最新状态即可:

  • 先进入子模块目录:
    cd api/gems/file_service
    
  • 拉取远程仓库的最新代码并强制重置到对应分支(这里假设子模块用的是master分支,根据实际情况替换):
    git fetch origin && git reset --hard origin/master
    
  • 回到主仓库目录,把这个子模块的重置操作加入暂存区(这样后续提交就不会再包含意外的子模块变更了):
    cd ../..
    git add api/gems/file_service
    

情况2:这不是子模块(Git误识别)

如果这个Gem本来就是普通目录,只是Git错误地把它当成了子模块,你需要先清除子模块缓存,再重置文件:

  • 清除Git对该路径的子模块缓存:
    git rm --cached api/gems/file_service
    
  • 直接从远程仓库origin拉取该路径的原始版本覆盖本地(替换master为你当前工作的分支名):
    git checkout origin/master -- api/gems/file_service
    

做完上面的操作后,再运行git status检查一下,应该就看不到这个Gem目录的变更了,之后你就可以正常提交你的其他代码变更啦。

内容的提问来源于stack exchange,提问作者Forrest Keppler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:09:50