我是Git的新手,现在处于这种情况:
我是一名计算机科学专业的学生,现在我们有一个来自我大学的git存储库(位于GitLab上),并且在该“主”存储库中,我们每两周都会得到一个新项目(我们只需要完成代码即可)。这些项目是主存储库中的子模块。教授每2周更新一次新项目(子模块)的主要资料库。
使用git pull
,我可以更新主存储库,使用git submodule update --init --recursive
,我可以更新我的子模块。如果我的主存储库中已经有一个新项目,而我正在研究该项目,则教授可以例如再次更新该子模块的master
分支(错误修正或类似内容)。
在不丢失我的代码的情况下更新master
分支和子模块(如果我的代码几乎完成)的最佳解决方案是什么?我读到一些东西,我可以做一个新的本地分支并在上面工作,如果有更新,我可以轻松地合并我的更改和master
上的“错误修正”。但这不是合并冲突吗?我希望你能理解我。
欢迎来到Git朋友!我想说的一件事是,最好对存储库使用特定术语,而不要使用诸如“主存储库”之类的含糊术语(您是新手,因此暂时不对;)
我们将术语remote
储存库用于上游储存库(ie,当您在GitLab上打开repo(储存库的缩写)时,会在浏览器中看到GitLab链接。它最初位于某人其他人的计算机(可能是您教授的计算机)。您计算机上的存储库称为local
存储库。
继续您的问题,保持本地代码与上游完全更新的方法是:
git pull
。这将从远程引入最新更改,并将它们合并到本地存储库中。这可能会导致合并冲突,这非常好,因为当同一段代码发生更改时就会发生合并冲突。您可以参考this答案以了解有关合并冲突的更多信息。git submodule update --init --recursive
。这会将您的子模块更新到您的超级项目i.e。(包含整个项目的目录)期望的位置。此外,如果超级项目仅包含子模块而没有其他任何东西,则git submodule update --init --recursive
就足够了。
如果您想进一步了解git或与其相关的术语,也可以参考this!
如有任何其他疑问,请随时发表评论! :)
最佳
另一个问题:
可以“移动”分支吗?
例如:
第一个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