如何将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
相关产品推荐
相关产品推荐

