2010-12-23 206 views
1

我有一个GIT存储库和几个SUBMODULES。GIT子模块更新*删除未被取消的文件

的问题是每一个有人更新子模块的时候,我试图通过调用来更新我的文件:

$ 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

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。