GIT子模块更新*删除未提交的文件

时间:2010-12-23 11:35:59

标签: git git-submodules

我有一个GIT存储库,里面有几个SUBMODULES。

问题是每次有人更新子模块时,我都会尝试通过调用以下方式更新我的文件:

$ git submodule update

但是会发生什么呢?它会删除我所有非常烦人的未提交文件 我试图提交并推送文件,但它不允许我推送:

error: failed to push some refs to 'ssh://dev.ancreative.co.uk/var/git/library/Blocks.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again.  See the 'non-fast-forward'
section of 'git push --help' for details.*

所以我尝试拨打git submodule update,但之后会发生这种删除。

任何人都知道会导致这个问题的原因是什么?非常感谢。

1 个答案:

答案 0 :(得分:1)

git submodule update无法帮助您解决“非快进”的情况 它只会检查父回购引用的引用 它不会拉任何东西。

另外,如git book中所述:

  

git submodule update 检出特定的提交,而不是分支的提示
  这就像检查标签一样:头部是分离的,所以你不在分支机构上工作。

$ git branch
* (no branch)
master
  

如果要在子模块中进行更改并且有一个分离头,则应创建或签出分支,进行更改,在子模块中发布更改,然后更新超级项目以引用新提交:

$ git checkout master

因此,更新删除文件(即使先提交)也可能与您在分离分支中的事实有关。 (注意:在“git submodule update”删除looking at the reflog之后的所有内容后,您仍然可以取回在该分离分支中提交的提交。

在子模块中的适当分支后,您可以:

  • 尝试push
  • 如果由于非快进情况而失败,您可以git pull首先与最新的远程提交合并。
  • 然后push再次
  • 最后,返回父级仓库并在那里commit注册子模块的新SHA1。