更新Git子模块而不会丢失我的代码

问题描述 投票:0回答:2

我是Git的新手,现在处于这种情况:

我是一名计算机科学专业的学生,​​现在我们有一个来自我大学的git存储库(位于GitLab上),并且在该“主”存储库中,我们每两周都会得到一个新项目(我们只需要完成代码即可)。这些项目是主存储库中的子模块。教授每2周更新一次新项目(子模块)的主要资料库。

使用git pull,我可以更新主存储库,使用git submodule update --init --recursive,我可以更新我的子模块。如果我的主存储库中已经有一个新项目,而我正在研究该项目,则教授可以例如再次更新该子模块的master分支(错误修正或类似内容)。

在不丢失我的代码的情况下更新master分支和子模块(如果我的代码几乎完成)的最佳解决方案是什么?我读到一些东西,我可以做一个新的本地分支并在上面工作,如果有更新,我可以轻松地合并我的更改和master上的“错误修正”。但这不是合并冲突吗?我希望你能理解我。

git gitlab git-branch git-submodules
2个回答
0
投票

欢迎来到Git朋友!我想说的一件事是,最好对存储库使用特定术语,而不要使用诸如“主存储库”之类的含糊术语(您是新手,因此暂时不对;)

我们将术语remote储存库用于上游储存库(ie,当您在GitLab上打开repo(储存库的缩写)时,会在浏览器中看到GitLab链接。它最初位于某人其他人的计算机(可能是您教授的计算机)。您计算机上的存储库称为local存储库。

继续您的问题,保持本地代码与上游完全更新的方法是:

  1. 执行git pull。这将从远程引入最新更改,并将它们合并到本地存储库中。这可能会导致合并冲突,这非常好,因为当同一段代码发生更改时就会发生合并冲突。您可以参考this答案以了解有关合并冲突的更多信息。
  2. [之后跟一个git submodule update --init --recursive。这会将您的子模块更新到您的超级项目i.e。(包含整个项目的目录)期望的位置。

此外,如果超级项目仅包含子模块而没有其他任何东西,则git submodule update --init --recursive就足够了。

如果您想进一步了解git或与其相关的术语,也可以参考this

如有任何其他疑问,请随时发表评论! :)

最佳


0
投票

另一个问题:

可以“移动”分支吗?

例如:

第一个git pull之后的位置:

A--B--C master
       \
        D--E--F working

“错误修正”后的位置:

A--B--C--D--E master
       \
        M--N--O working

现在可以移动我的工作分支并得到类似的信息(要进行更新,请复制最后一个主分支并进行更新,并从工作分支中保存我以前的代码)?:

A--B--C--D--E master
             \
              M--N--O working
© www.soinside.com 2019 - 2024. All rights reserved.