我有一个git子模块(RestKit),我已经添加到我的repo。
我不小心更改了里面的一些文件,我想回到原始版本。为了做到这一点,我试着逃跑
Mac:app-ios user$ git submodule update RestKit
但正如你在这里看到的,这并没有起作用,因为它仍然是“修改的内容”:
Mac:app-ios user$ git status
...
# modified: RestKit (modified content)
甚至
Mac:app-ios user$ git submodule update -f RestKit
不恢复本地修改的文件。
如何重置该子模块的内容?
这适用于运行GIT v1.7.1的库,其中我们有一个DEV包回收和LIVE包回收。存储库本身只不过是一个为项目打包资产的外壳。所有子。
LIVE从不被故意更新,但是缓存文件或意外可能发生,使repo变得脏。添加到DEV的新子模块也必须在LIVE中初始化。
DEV中的包存储库
在这里,我们希望获取我们还没有意识到的所有上游更改,然后更新我们的包存储库。
# Recursively reset to the last HEAD
git submodule foreach --recursive git reset --hard
# Recursively cleanup all files and directories
git submodule foreach --recursive git clean -fd
# Recursively pull the upstream master
git submodule foreach --recursive git pull origin master
# Add / Commit / Push all updates to the package repo
git add .
git commit -m "Updates submodules"
git push
LIVE中的包存储库
在这里,我们希望提取提交给DEV存储库的更改,而不是未知的上游更改。
# Pull changes
git pull
# Pull status (this is required for the submodule update to work)
git status
# Initialize / Update
git submodule update --init --recursive