submodule

已经建立好了一个gitlab submodule形式的repo:

在repo A下面有一个submodule B, A --> B。

clone -b branch [repoA]
cd A
git submodule update --init

之后,在B的文件夹下运行

git branch

会发现当前分支处于一个临时分支上:

 (HEAD detached at 3bf1f88)

但是在提交repoA的时候,更新的是B中的production分支:

git submodule foreach git co -b production
git submodule foreach git pull origin production

而pull下来之后却是在临时分支上。

搜索一阵之后,结论是:

1. repoA中只会保存repoB的某一个commit,而不知道(或者不管)这个commit是哪个分支的。update之后submodule都会在一个临时分支上。

2. 在更新repoA中的submodule时,需要到每一个submodule中进行操作,如果所有submodule分支名都相同,那么可以使用git submodule foreach命令。

3. 如果想要repoA和repoB的分支名相同,比如repoA的production分支指向submodules的production分支,需要保证在更新时让repoA指向repoB的production分支的最新的commit,而不是在clone和pull代码时让repoB改为production分支。

4. 使用repoA时,可以不用管repoB正处在临时分支上,因为提交repoA代码的时候保证了repoB的commit是目标分支上的,此时repoB的代码就是想要的版本。

新建一个submodule repo过程参考https://blog.csdn.net/czhpxl007/article/details/50555853

reset

正好碰到了一个需求:在一个本地分支上提交了几个commit之后,现在想回到之前一个一个节点上,但是修改的内容也要保存下来。

以前一直使用 git reset --hard commitID,但是--hard参数不会保存修改的内容,会把所有的变化全部删除。

研究一番之后,发现 --soft 和 --mixed参数都可以解决这个问题。

先转载一段介绍https://www.cnblogs.com/kidsitcn/p/4513297.html

Index
index也被称为staging area,是指一整套即将被下一个提交的文件集合。他也是将成为HEAD的父亲的那个commit Working Copy
working copy代表你正在工作的那个文件集 Flow
当你第一次checkout一个分支,HEAD就指向当前分支的最近一个commit。在HEAD中的文件集(实际上他们从技术上不是文件,他们是blobs(一团),但是为了讨论的方便我们就简化认为他们就是一些文件)和在index中的文件集是相同的,在working copy的文件集和HEAD,INDEX中的文件集是完全相同的。所有三者(HEAD,INDEX(STAGING),WORKING COPY)都是相同的状态,GIT很happy。 当你对一个文件执行一次修改,Git感知到了这个修改,并且说:“嘿,文件已经变更了!你的working copy不再和index,head相同!”,随后GIT标记这个文件是修改过的。 然后,当你执行一个git add,它就stages the file in the index,并且GIT说:“嘿,OK,现在你的working copy和index区是相同的,但是他们和HEAD区是不同的!” 当你执行一个git commit,GIT就创建一个新的commit,随后HEAD就指向这个新的commit,而index,working copy的状态和HEAD就又完全匹配相同了,GIT又一次HAPPY了。

其实也就是通过git add和git commit进行状态变更。

--soft参数:

soft参数会恢复到git add之后git commit之前,也就是把变更记录到了index区。此时HEAD指针指向了恢复到的commitID

--mixed参数:

mixed参数会直接恢复到git add之前,即所有更改都还在工作区,没有任何提交动作,HEAD指针同soft参数一样。mixed参数也是git reset的默认参数

所以为了满足需求,使用git reset --soft commitID就行。

PS. 使用--hard之后,虽然所有更改都删除了,但是commitID仍然还在,再使用git reset --hard latestCommitID 之后,可以把删除掉的节点恢复。

git submodule临时分支;以及git reset使用的更多相关文章

  1. git别名;git配置使用shell函数;git别名使用shell函数;git获取当前分支;git alias

    获取当前分支 git symbolic-ref -q --short HEAD 2. 在git别名里使用shell函数,$1获取第一个参数的值,$2……$n依次类推,根据自己习惯需要定制 3. 提交r ...

  2. git之合并分支(git merge)------(三)

    最近几天写小demo,总是自己拉取他人的代码,然后创建分支,在自己的分支上进行修改,然后提交到自己的分支,具体的这一步,我就不多讲了,因为在我的博客“工作中常用的Git操作”中有详细的介绍,今天主要讲 ...

  3. git在本地分支上 git pull远程分支时,状况

    git 在pull或者合并分支的时候有时会遇到这个界面.可以不管(直接下面3,4步),如果要输入解释的话就需要: 1.按键盘字母 i 进入insert模式 2.修改最上面那行黄色合并信息,可以不修改 ...

  4. 转:Git Submodule管理项目子模块

    使用场景 当项目越来越庞大之后,不可避免的要拆分成多个子模块,我们希望各个子模块有独立的版本管理,并且由专门的人去维护,这时候我们就要用到git的submodule功能. 常用命令 git clone ...

  5. Git submodule - 子模块【转】

    子模块 有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目. 也许是第三方库,或者你独立开发的,用于多个父项目的库. 现在问题来了:你想要把它们当做两个独立的项目,同时又想在一个项目中使 ...

  6. Git Submodule管理项目子模块

    使用场景 当项目越来越庞大之后,不可避免的要拆分成多个子模块,我们希望各个子模块有独立的版本管理,并且由专门的人去维护,这时候我们就要用到git的submodule功能. 常用命令 git clone ...

  7. Git Submodule使用完整教程

    Git Submodule功能刚刚开始学习可能觉得有点怪异,所以本教程把每一步的操作的命令和结果都用代码的形式展现给大家,以便更好的理解. 1.对于公共资源各种程序员的处理方式 每个公司的系统都会有一 ...

  8. 史上最浅显易懂的Git教程3 分支管理

    假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了.如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险 ...

  9. 版本控制git之二 分支 切换分支 创建分支 合并 删除

      版本控制git之二 分支   有人把 Git 的分支模型称为它的`‘必杀技特性’',也正因为这一特性,使得 Git 从众多版本控制系统中脱颖而出. 为何 Git 的分支模型如此出众呢? Git 处 ...

随机推荐

  1. Listview Section 多个标题以及内容

    其中日期标题部分视图布局: 带图片的条目布局部分: 问题在于,如何在ListView中既有标题条目又有内容条目. 这里用到了设计模式中的Iterator模式.在java代码中示例有Iterator,可 ...

  2. Gallery 里面怎么设置ImageView的OnClick事件

    Gallery g=this.findViewById(R.id.gallery); g.setOnItemClickListener(new OnItemClickListener(){ @Over ...

  3. Hibernate--快速上手

    一.初识 Hibernate 经典的软件应用体系结构有三层:表示层(提供了与用户交互的接口,实现用户操作界面,展示用户需要的数据).业务逻辑层(完成业务流程,处理表示层提交的数据请求,并将要保存的数据 ...

  4. 310实验室 Linux 软件安装常见问题

    电脑装好Linux系统后,系统默认安装软件不齐,需要自己根据自己的需要安装一些列工具软件,在linux系统中,用的最多的就是Synaptic Package Manager,什么是Synaptic?新 ...

  5. oracle通过profile限制用户的恶意登录和使用期限

    用户profile口令管理 1,可以把profile想象成一个数据对象(文件,规则) 案例: 允许某用户,最多尝试登录3次,如3次未登录成功,则锁定该用户,锁定后两天不能登录系统 设置语法(syste ...

  6. SpringCloud 进阶之分布式配置中心(SpringCloud Config)

    1. SpringCloud Config SpringCLoud Config 为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用 的所有环境提供了一个中心化的外部配置; ...

  7. ansible相关

    上图为ansible的基本架构,从上图可以了解到其由以下部分组成: 核心:ansible 核心模块(Core Modules):这些都是ansible自带的模块 扩展模块(Custom Modules ...

  8. 【云安全与同态加密_调研分析(7)】安全技术在云计算中的安全应用分析——By Me

                                                                   我司安全技术在云计算中的安全应用分析 1. 基于云计算参考模型,分析我司安 ...

  9. MySQL server has gone away 问题的解决方法(转)

    mysql出现ERROR : (2006, 'MySQL server has gone away') 的问题意思就是指client和MySQL server之间的链接断开了. 造成这样的原因一般是s ...

  10. PAT 1044 Shopping in Mars[二分][难]

    1044 Shopping in Mars(25 分) Shopping in Mars is quite a different experience. The Mars people pay by ...