检查代码到一个分离的头

时间:2016-04-04 00:02:14

标签: git gitlab

我有一个项目有一个子模块,它是一个独立的头(它是这样设计的)。现在我必须对分离头中的文件进行一些更改。以下是我的所作所为。

当我处于分离的头部路径( /user/project/base ((d4b9ede...))

git add testFile.py
git commit -m "made some change in this file"
git checkout -b temp
git checkout master
git pull
git merge temp
git branch -d temp
git push

在此之后,当我打开gitlab项目时,我可以看到远程服务器中所做的更改。但是当我克隆同一个项目时,我似乎没有看到对该文件所做的更改。我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

子模块确实是“按照这种方式设计的”:超级项目列出了子项目中所有内容的提交ID,因此签出超级项目可以获得每个子项目在其特定提交ID处具有分离的HEAD。

这就是您没有看到更改的原因:您的子项目在其master分支上有一个新提交,但您的超级项目不使用该分支(至少,不在任何分支中)直接的方式)。

这意味着在您完成并提交并且已经推动某些子模块的某些更改之后,您必须,分别移动到您的超级项目并告诉git这个单独的东西 - 超级项目 - 现在应该通过它的(新)提交ID引用子项目中的新提交。

自从我上次这样做(git 1.5 / 1.6)以来,这似乎发生了变化,因此旧方法 - cd到超级项目并仔细git add子模块,确保不使用即使自动填充确实希望在那里有/,路径名中的斜杠也不再是唯一的方法(尽管毫无疑问它仍然有效)。这些天你也可以使用git submodule update --remote,也可以选择--no-fetch。这确实要求您首先推送子模块更新(并使用超级项目中记录的分支设置,其.git/config或其.gitmodules,默认为master - 这是{{ 1}}分支,或其他一些分支,最后重新进入图片)。

更新超级项目以便它知道新的提交ID后,您必须提交到超级项目并推送它。

Pro Git bookthis blog posting都有关于子模块的其他信息。我个人仍然试图避免子模块;他们的“sobmodules”昵称在1.6天的git中非常合适,并且可能仍然是基于该博客帖子(最近更新于2016年1月中旬)。