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. Unity3D 笔记一 初始Unity3D

    一.初步认识Unity 1.Unity支持C#.JavaScript.Boo,JavaScript不是标准语法,常称为UnityScript更合适 2.Update 每一帧都会调用该方法.Start. ...

  2. 微信小程序 --- 动态获取input的value

    这里对 input 使用的是 bindinput 方法: <input type="text" bindinput="input"> <but ...

  3. Think PHP递归重新排序无限极子分类数组(递归无限极分类)

    Think PHP递归重新排序无限极子分类数组 // 递归重新排序无限极子分类数组 function recursive($array,$pid=0,$level=0){ $arr = array() ...

  4. rest_framework之规范详解 00

    接口开发 方式1:缺点:如果有10张表,则需要40个url. urls.py views.py 缺点:如果有10张表,则需要40个url.    接下来就出现了resrful 规范,比较简洁 方式2: ...

  5. Yii 的session 实现返回上上页面

    学习session的页面:http://www.yiichina.com/doc/guide/2.0/runtime-sessions-cookies 关键摘要: $session = Yii::$a ...

  6. Antenna Placement---poj3020(最大匹配)

    题目链接:http://poj.org/problem?id=3020 题意:每个 ‘*’都需要一个1*2的东西覆盖,问最少需要多少个1*2的东西来覆盖这些‘*’ 和Oil Skimming的题解几乎 ...

  7. mysql 整数类型 数值类型 tinyint

    1.整数类型 整数类型:TINYINT SMALLINT MEDIUMINT INT BIGINT 作用:存储年龄,等级,id,各种号码等 ============================== ...

  8. Openstack(七)keystone

    官方安装文档:https://docs.openstack.org/ocata/zh_CN/install-guide-rdo/index.html 7.1 keystone简介 Keystone 中 ...

  9. Centos7 Zabbix3.2安装

    实验环境: 阿里云 [zabbix@miyan ~]$ cat /etc/redhat-release CentOS Linux release (Core) 不得不说,官方文档确实强大 1.官方文档 ...

  10. Selenium之IE浏览器的启动

    1.下载IEDriverServer.exe文件放至需要的目录中: 2.编写代码 import org.openqa.selenium.WebDriver; import org.openqa.sel ...