IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Git命令 -> 正文阅读

[开发工具]Git命令

###?版本控制工具?

????1.项目模块小组分开开发,每个人开发完后需要整个成一个整体的项目?,借助版本控制工具来解决?

????2.项目是开发是过程化的,(v1.0?-->?v1.1?-->?v1.2?-->?v2.0)用版本控制工具,轻松切换每一个版本?

###?版本控制工具分类

????git?(分布式)

????svn?(集中式)

????区别:

????????1.不管git?还是svn?都是版本控制工具都能形成版本(version?)???

???????????git能在开发者本机形成自己的版本version控制,但是svn?必须提交中央服务器才能形成版本

????????2.不管是git还是svn?如果是要代码合并,必须都要依靠中央服务器

????????3.在git中大部分?"合法操作"?都是可以撤回的?,但是在svn中有些操作是不可以撤回

###?怎么学习git??》》??实验科学

###?git?优势

????1.能在本地和服务器形成版本控制

????2.git的版本成重写提交说明

????????svn?不可以重写提交说明

????3.git?一般都可以撤回‘后悔’

????4.git?强大的分支系统,每个分支都有独特的函数

????????????master??-->?主分支??-->?不直接做开发?分支代码稳定,直接上线发布

????????????dev?????-->?开发分支?-->?开发代码的分支?

????????????test????-->?测试分支??-->??测试人员?测试代码安全性能分支?

????????分支:

????????????版本形成的提交线路?

????5.git形成版本?(全量备份?)?svn?(增量备份)

????????git:?每个版本保存全部代码文件?(修改的和未修改的)

????????svn:?每个版本只保存修改的代码??(修改的代码?项目不完整)

###?git?运行在linux?内核上

????1.下载?:?git?官网?下载安装包?傻瓜式安装?(下一步?)

????2.检查git?是否安装成功??

????????桌面右击?--》?git?bash?here?-->?用git?bash?交互窗口打开当前目录?(内部可以写linux命令)

????3.?为了实验?补充常用的linux命令

????????cd?-->?change?diretory???-->?切换目录

????????????cd?~?切换到用户家目录?

????????????cd?-?切换到上一个目录位置

????????ls?-->?list??????????????-->?列出当前目录下的显示的文件和文件夹?

????????????-a???查看所有文件包括隐藏文件??linux?中以.开头的文件就是隐藏文件?./?../?.abc.txt

????????????-l???以长格式查看文件和文件夹?

????????touch?文件名?????????????-->?创建文件和更新已存在文件的访问时间

????????mkdir?文件夹名???????????-->?创建文件夹

????????cat?文件名???????????????-->?查看文件内容

????????echo??'??'??>??终端(文件)???-->?输出?字符串

????????????>??覆盖写?

????????????>>?追加写

????????mv?原文件夹/文件??目标位置/重命名??-->?移动文件、重命名

????????cp??文件???位置/文件名????????????-->?拷贝文件

????????cp?-r??目录?位置/目录名???????????-->?拷贝目录?

????????pwd??打印当前的工作目录?????

????????ctrl?+?a??前置光标

????????ctrl?+?e??后置光标

????????ctrl?+?c??放弃当前行命令状态?开启下一行

????????clear??清屏?

????????history??查看历史命令?

????????vi/vim?(linux中自带的编辑器)

????????????实验:?vi修改文件内容

????????????????a)?vi?文件名

????????????????????vi打开了一个文件?,但是不能直接修改,因为vi?存在两种模式?(命令模式?输入模式?)

????????????????b)?默认是命令模式只有切换到输入模式才能修改文件内容

????????????????????按字母?i?--》?insert(插入?输入模式)?

????????????????c)?在输入模式的情况下?编辑文件内容

????????????????????修改完文件内容

????????????????d)?推出编辑模式?esc?进入命令模式?

????????????????????:wq!

????????rm?-rf?文件/文件名???????-->

????????文件修改?--》?编辑文件内容?

????????目录修改?-->??目录重命名?删除?,目录内部文件的增删改

????????window?文件是按照文件后缀名区分文件类型?但是linux?中?他不是以文件后缀名区分文件类型的?(linux中所有的类型都是文件?,正式因为这样linux系统相对安全)

????4.?linux?中的?权限

????????d?rwxr-xr-x?????1?xuanqiyan?197121?0?May?17?08:45?git/

????????rwx?(所有者)?r-x??(所属组)?r-x??(其他人)

??????????r?:?read??读取

??????????w?:?write?写

??????????x?:?execute?执行?

??基础实验?//?

####?git?基本实验

????实验一:如何使用git?bash?初始化一个本地仓库

????????1.?如果是第一次操作git?需要设置email?和?name?

????????????设置:

????????????????git?config?--global?user.name?""

????????????????git?config?--global?user.email?""

????????????????/*

????????????????????--local???--》?本仓库?--》?.git/config?配置文件中?优先级最高

????????????????????--global??--》?计算机的登录用户?--》?~/.gitconfig?配置文件中?

????????????????*/

????????????查询:

????????????????git?config??user.name??

????????????????git?condfig?user.email

????????????删除:

????????????????git?config?--local?--unset?user.name

????????????????git?config?--local?--unset?user.email

????????????作用:?是提交代码或者本地形成版本需要根据?name?和?email??识别这个版本作者是谁

????????2.?将一个原始的文件夹?变成?git?所能控制的git仓库

????????????git?init

????????????作用:?在当前目录下形成一个.git这样的隐藏文件夹?还有master分支(默认主分支)的显示

????????3.如何形成一个版本?

????????????touch?a.txt

????????????echo?"代码"?>>?a.txt

????????????git?add?a.txt

????????????git?commit?-m?'版本说明'

????????????????/*

????????????????????[master?(root-commit)?24e7b14]?第一次提交

????????????????????1?file?changed,?1?insertion(+)

????????????????????create?mode?100644?a.txt

????????????????*/

????????4.?查看提交版本的历史

????????????git?log

????????????????/*

????????????????????commit?24e7b14108f07686817da82a4c50c34b16aee4fd?(HEAD?->?master)

????????????????????Author:?Yanzhijie?<1730903@163.com>

????????????????????Date:???Tue?May?18?09:07:42?2021?+0800

????????????????????????版本说明

????????????????????24e7b14108f07686817da82a4c50c34b16aee4fd??是git?使用sha1?加密算法生成的唯一ID

????????????????????目的:不是为了加密而是为了产生一个不重复的字符串

????????????????*/

####?git?中的区域

????3个区域:?工作区?暂存区?对象区

????补充命令:

????????git?status?查看当前git仓库所有中文件的状态????

????实验二:重新执行实验一?针对每一个次操作查看状态

????????touch?a.txt

????????echo?'aaa'?>>?a.txt

????????git?status?--》?查看git仓库中的文件状态?

????????????/*

????????????????On?branch?master??//在主分支master上

????????????????No?commits?yet????//还没有任何提交?

????????????????Untracked?files:??//?untarcked?未追踪?文件:(tracked追踪?)

????????????????(use?"git?add?<file>..."?to?include?in?what?will?be?committed)?//使用git?add?将未追踪的文件?加入到commit之前的区域?(暂存区)

????????????????????????a.txt???//?未追踪的文件

????????????*/

????????git?add?a.txt

????????git?status??

????????????/*

????????????????On?branch?master??

????????????????No?commits?yet

????????????????Changes?to?be?committed:?//?暂存区的内容可以被提交?形成版本

????????????????(use?"git?rm?--cached?<file>..."?to?unstage)???//可以使用?git?rm?--cached?<file>?将暂存区的文件重新撤销到工作区

????????????????????????new?file:???a.txt?//?对于暂存区有一个新的追踪的文件a.txt?加入

????????????*/???

????????git?commit?-m?'第一次提交'?

????????git?status

????????????/*

????????????????On?branch?master??

????????????????nothing?to?commit,?working?tree?clean??//?暂存区清空了??工作区?clean?意思是工作区所有的文件都形成版本了,对象区区的最新的版本和工作区的内容完全一致?,这叫?clean?(清空),而不是工作区的文件丢失或者隐藏

????????????*/

????实验三:如何将暂存区的内容重新拉回到工作区

????????1.?mkdir?test?&&?cd?test?&&?git?init

????????2.?touch?a.txt?

???????????echo?'aaa'?>>?a.txt

????????3.?git?add?a.txt

????????4.?git?status

????????????/*

????????????????On?branch?master

????????????????No?commits?yet

????????????????Changes?to?be?committed:

????????????????(use?"git?rm?--cached?<file>..."?to?unstage)??//目的:?将暂存区的a.txt?拉回到unstage?状态(工作区)

????????????????????????new?file:???a.txt

????????????*/

????????5.?执行撤销

????????????git?rm?--cached?a.txt??

????????????/*????

????????????????注意:?如果第一次从暂存区撤销到工作区?使用这个命令?

????????????????rm?'a.txt'?从暂存区删除了?到工作区了?

????????????*/? ?

????????6.?git?status

????????????/*??发现?回到一开始未add之前的状态

????????????????On?branch?master

????????????????No?commits?yet

????????????????Untracked?files:

????????????????(use?"git?add?<file>..."?to?include?in?what?will?be?committed)

????????????????????????a.txt

????????????*/

????实验四:提交多个版本?以及日志查看方式

????????1.?mkdir?test?&&?cd?test?&&?git?init

????????2.?touch?a.txt?b.txt

????????????echo?'aaaa'?>>?a.txt

????????????echo?'bbbb'?>>?b.txt

????????3.?git?add?.??//?注意:?这个?"."?指的是?相对于上一次提交的本版而言工作新所有更改(新增?删除?修改)的文件?

????????4.?git?commit??

???????????注意:如果commit时候没有?加-m?参数?会打开vi编辑器?让你输入版本说明文字??,说明文字可以多行输入

????????5.?第一个版本形成了?

????????????git?log?查看提交日志?

????????6.?touch?c.txt

???????????echo?'cccc'?>>?c.txt

????????7.?git?add?.

????????8.?git?status

????????????/*??

????????????????On?branch?master

????????????????Changes?to?be?committed:

????????????????(use?"git?restore?--staged?<file>..."?to?unstage)??

????????????????????????new?file:???c.txt

????????????*/?

????????9.?git?restore?--staged?c.txt

????????????/*

????????????????注意:?对比实验三?都是从暂存区撤销到工作区,但是命令不一样,因为此时第二次加入到工作区了,以后每一次撤销都是用这个命令?

????????????*/

????????10.?git?commit?-m?'xxx'

????????????/*

????????????????不能直接提交,因为暂存区没有任何何以提交的内容

????????????*/?

????????11.?git?add?.

????????12.?git?commit?-m?'第二个版本'

????????13.?git?log???--》?查看所有日志

????????????/*

????????????????commit?cb98a0d2743b70f49b9c1606fc999ec3f2c1a477?(HEAD?->?master)

????????????????Author:?Yanzhijie?<1730903@163.com>

????????????????Date:???Tue?May?18?10:34:33?2021?+0800

????????????????????第二个版本

????????????????commit?f851d27133b2e057db3e6eefbb3d256bdeceafaa

????????????????Author:?Yanzhijie?<1730903@163.com>

????????????????Date:???Tue?May?18?10:19:27?2021?+0800

????????????????????这是第一次提交

????????????????????这个代码很棒

????????????????????这是我写的

????????????*/

????????14?多种方式查看日志

???????????git?log?-n???-->?查看最近几次提交日志?

???????????git?log?--pretty=oneline?-->?以单行查看日志内容

???????????git?log?--pretty=format:"%h?-?%an?,%ar?:?%s"

???????????/*

???????????"%h??????-?%an???????,%ar????????????:?%s"

????????????cb98a0d?-?Yanzhijie?,16?minutes?ago?:?第二个版本

???????????*/

??检出实验?//?

????检出:

????????对于一个文件修改(modify)?或者是?删除(delete)?那么文件名之前就会有对应的操作动作

????????????modified?:?a.txt

????????????delete?:?a.txt

????????检出指的是移除前面的动作?恢复到动作之前的文件状态

???###?实验五?对已提交的文件再次执行编辑?

???????mkdir?test?&&?cd?test?&&?git?init

???????touch?a.txt?b.txt

???????echo?'aaaaa'?>>?a.txt

???????echo?'bbbbb'?>>?b.txt

???????git?add?.

???????git?commit?-m?'第一个版本'?

???????vi?a.txt??-->?编辑内容

???????git?status

????????/*

????????????On?branch?master

????????????Changes?not?staged?for?commit:

????????????(use?"git?add?<file>..."?to?update?what?will?be?committed)

????????????(use?"git?restore?<file>..."?to?discard(撤销)?changes?in?working?directory)

????????????????????modified:???a.txt

????????????no?changes?added?to?commit?(use?"git?add"?and/or?"git?commit?-a")

????????????1.?由于?git?add?<file>...?说明?被修改的文件重新拉回到工作区?

????????????2.?可以使用??git?restore?<file>...?撤销此次的修改?--->?检出?

????????????3.?如果确定修改?要对这次修改做版本提交?使用?git?add?.?/?git?commit?-m?

????????*/

????????git?restore?a.txt??//检出操作?移除a.txt的前面的修改动作恢复修改之前的文件状态

????????git?status

????????/*

????????????On?branch?master

????????????nothing?to?commit,?working?tree?clean

????????*/

????????vi?a.txt??-->?编辑内容?

????????git?status

????????git?add?.?/?git?commit?-m?''??//对修改的内容做版本提交

????###?对已提交的文件再次执行删除?

????????删除模式:基于操作系统的文件删除?rm??/?git方式的删除?git?rm?

????????场景:有两个commit??,第一个commit?包含a.txt?和?b.txt?第二个commit?包含a.txt?b.txt?只不过对a.txt重新修改了?

??????????????删除b.txt

????????实验六?执行操作系统删除

????????????ls?-->?a.txt?和?b.txt

????????????rm?-rf?b.txt?-->?操作系统的直接删除?

????????????ls?-->?只有a.txt

????????????git?status

????????????/*

????????????????On?branch?master

????????????????Changes?not?staged?for?commit:

????????????????(use?"git?add/rm?<file>..."?to?update?what?will?be?committed)

????????????????(use?"git?restore?<file>..."?to?discard?changes?in?working?directory)

????????????????????????deleted:????b.txt

????????????????no?changes?added?to?commit?(use?"git?add"?and/or?"git?commit?-a")

????????????????1.?git?add?file?说明此时删除的b.txt?文件拉回到工作区?,只不过看不到b.txt

????????????????2.?执行了git?add??/git?commit??形成新的版本?,这个版中才真实的没有b.txt

????????????????3.?也可以使用?git?restore?<file>...?对删除动作进行检出

????????????*/??

????????????git?restore?b.txt?//?检出删除

????????????ls?-->?发现b.txt?

????????????rm?-rf?b.txt?-->?再次执行删除?

????????????git?add?.

????????????git?status

????????????/*

????????????????On?branch?master

????????????????Changes?to?be?committed:

????????????????(use?"git?restore?--staged?<file>..."?to?unstage)

????????????????????????deleted:????b.txt

??

????????????????注意:1.?add?提交的不是某一个单独的文件?二十对某一个文件的删除动作?,如果后面执行commit?也是提交的文件的删除动作?,

????????????????形成的新版本中就真的不存在b.txt文件了?

?????????????????????2.?如果现在还想后悔??

????????????????????????a)?git?restore?--staged?<file>...?将暂存区的提交撤销到工作区?

????????????????????????b)??git?resrore?<file>????检出了删除动作?工作区就clean这个状态了?b.txt的文件就回来了


?

????????????*/

????????????git?commit?-m?'删除了b.txt?文件'

????????????

????????????ls?-->?只有a.txt?

????????????git?status??-->?工作区也是干净的

????????????问题:?此时b.txt文件在工作区消失了?还能否重新拉回b.txt文件??

??????????????????可以?需要切换版本就可以实现???

????????????

????????实验七?执行git方式的删除??

????????????git?rm?a.txt

????????????ls?-->?a.txt删除了?

????????????git?status

????????????/*

????????????????On?branch?master

????????????????Changes?to?be?committed:

????????????????(use?"git?restore?--staged?<file>..."?to?unstage)

????????????????????????deleted:????a.txt

????????????????注意:

????????????????????如果是git?rm?删除一个已提交的文件?,这个文件包括动作(deleted)拉回到暂存区

????????????*/

????????????//如果要撤销删除

????????????git?restore?--staged?a.txt?-->?将暂存区的a.txt?拉回到工作区?

????????????git?restore?a.txt?-->?执行检出?

????????????ls??-->?出现a.txt

????????????git?status??-->?工作区?干净

????????????//如果要提交删除?

????????????git?rm?a.txt

????????????git?commit?-m?'删除a.txt'?//?为什么不用add???因为已经在暂存区,所以直接提交删除

?///?git?忽略?/

????.gitignore?:?作用是git在做提交的时候忽略的文件

????1.创建.gitignore

????2.编辑.gitignore文件

????????#?忽略单个文件

????????a.txt?

????????#?忽略一类文件?

????????*.txt

????????#?忽略某一类文件?除了特定文件?

????????*.js?

????????!c.js

????????#git会自动忽略空目录

????????#忽略一个非空的目录

????????/a

????????#忽略目录下的某些文件名?

????????/a/*

????????/a/*/*.txt??-->??/a/o/*.txt??/a/b/*.txt

????????/a/**/*.txt?-->?/a/o/*.txt??/a/o/c/d/*.txt

??///?git?分支实验?branch?/???????

????

????分支的概念:分支是由多个commit?按照一定的时间顺序链成的工作提交线,?分支名指向最新提交的commit?

????分支分类:

????????master?主分支???代码发布分支?不直接做开发?

????????dev????开发分支??代码开发分支

????????test???测试分支???

????????hot????bug热修复分支

????实验八:?分支的创建?切换?删除?查看??

????????注意:?在没有任何?commit?的情况下?不能创建新的其他分支

????????//创建分支

????????git?branch??分支名?

????????//查看分支

????????git?branch??

????????????-v?查看分支的同时查看分支所指向的commit?

????????//切换分支?

????????git?checkout?分支名??

????????//创建并切换分支

????????git?checkout?-d??分支名?

????????//删除分支

????????git?branch?-d????分支名?


?

????实验九:不能删除分支的实验(1)

????????1.在当前分支不能删除自身

????????2.如何分支包含‘未合并’的内容不能删除分支?

????????????未合并:这个分支的commit版本只有该分支指向与它,如果删除这个分支,这个commit?就无法再次获取,这么commit?就是‘未合并’的???

????????git?init

????????touch?a

????????echo?'aaa'?>>?a

????????git?add?.

????????git?commit?-m?'init'

????????//创建新分支

????????git?checkout??-b?dev

????????

????????git?branch?-av

????????/*

??????????*?dev????abd2701?init??

????????????master?abd2701?init?

????????*/

????????//dev?分支做提交

????????touch?b?&&?echo?'bbb'?>>?b

????????git?add?.

????????git?commit?-m?'dev第一次'

????????git?branch?-v

????????/*

????????????*?dev????dsad123?dev第一次

????????????master???abd2701?init?

????????*/

????????git?checkout?master?尝试删除dev?

????????git?branch?-d?dev

????????/*

????????????error:?The?branch?'dev'?is?not?fully?merged.

????????????If?you?are?sure?you?want?to?delete?it,?run?'git?branch?-D?dev'.

????????????分支dev?有一个未合并的commit?,如果删除?这个commit?就无法再次还原(找到?),不建议删除

????????????如果想删除?使用?D?强制删除

????????*/

????????思路1:?既然未合并的commit?只有唯一的一个分支指向与它从而导致不能正常删除,那么可以基于这个commit?做另一个分支来指向与它?,对于这个commit来说就不是‘未合并’的

????????git?checkout??dev

????????git?checkout?-b?test

????????git?branch?-v

????????/*

????????????dev??????dsad123?dev第一次??因为有两个分支指向与commit?所以dev分支可以删除的

????????*???test?????dsad123?dev第一次

????????????master???abd2701?init?

????????*/

????????git?checkout?master

????????git?branch?-d?dev??-->?ok?

????????思路2:强制删除?

????????git?branch?-D?test

?????实验九:不能删除分支的实验(2)

????????git?branch?-v

????????????dev????0ea7331?dev第一次

????????????*?master?abd2701?init

????????git?branch?-d?dev

????????/*

????????????error:?The?branch?'dev'?is?not?fully?merged.?//dev上有未合并的版本,所以要删除?必须合并

????????????If?you?are?sure?you?want?to?delete?it,?run?'git?branch?-D?dev'.

????????????合并:指的是其他分支(matser)指针只想于当前的commit?,这个指针移动的过程叫做合并?

????????*/???

????????//?合并位置master?合并dev

????????git?merge?dev

????????/*?

????????????Updating?abd2701..0ea7331?//?master的指针移动

????????????Fast-forward

????????????b?|?1?+

????????????1?file?changed,?1?insertion(+)

????????????create?mode?100644?b

????????*/???

????????git?branch?-v

????????/*

??????????????dev????0ea7331?dev第一次

????????????*?master?0ea7331?dev第一次

????????*/?

????????//再次尝试删除dev

????????git?branch?-d?dev?-->?ok?

????实验10?:补充实验

????????两个细节:

????????????1.如果在dev分支上进行了写操作(新建/删除/修改),这个写操作仅在工作区?和?暂存区(没有形成版本)

??????????????master?分支是能看到这个写操作的?,如果将写个写操作提交,master分支是看不到这个写操作

????????????结论:?分支之间是共享工作区和暂存区的

????????????2.如果在dev分支上进行了写操作(新建/删除/修改),这个写操作仅在工作区?和?暂存区(没有形成版本)。

?????????????此时dev分支是可以删除的

????实验11:?分支合并方式?(ff?默认?/?no-ff)

????????场景:master?分支相对于dev落后两个commit?,使用meger默认合并

????????gir?branch?-v

????????/*

????????????*?dev????830ef05?dev第四次提交

??????????????master?e07ebf0?dev第二次?c文件

????????*/???

????????//master分支合并dev分支?

????????git?merge?dev???

????????/*

????????????Updating?e07ebf0..830ef05

????????????Fast-forward??//前进?ff

????????????ff合并的细节:

????????????????1.??两个分支归于从同一个commit

????????????????2.??fast-forward?会丢失分支信息?

????????????????????git?log?--graph

????????*/?

????????场景:master?分支相对于dev落后两个commit?,使用meger默认合并

????????git?branch?-v

????????/*

????????????*?dev????297cbf0?新建b.txt

?????????????master?830ef05?dev第四次提交

????????*/

????????git?checkout?master

????????git?merge?--no-ff?dev?

????????/*

????????????1.使用--no-ff合并主动合并的分支会指向下一个新的commit版本

????????????2.--no-ff?不会丢失分支信息?

????????????????git?log?--graph?--pretty=oneline?--abbrev-commit

????????*/

????????//打开编辑器要求输入版本说明文字?--》?有新的commit形成

????????git?branch?-v

????????/*

??????????????dev????297cbf0?新建b.txt

????????????*?master?0ad5dc9?Merge?branch?'dev'?no-ff?合并dev分支

????????*/

????????git?checkout?dev

????????git?merge?mster??-->?两个指向同一个commit

????实验12:?在和并分支的时候的冲突???(非常重要)

????????场景:每个分支对同一个文件?的同一行有不同的实现?,前提是分支指向的版本之间没有时间关系

????????mkdir?test?&&?cd?test?&&?git?init

????????touch?a?

????????git?add?.?&&?git?commit?-m?'init'

????????//dev分支对a文件的修改

????????git?checkout?-b?dev

????????echo?'dev...'?>>?a

????????git?add?.?&&?git?commit?-m?'dev...'

????????//master分支对a文件的修改?

????????git?checkout?master

????????echo?'master...'?>>?a?

????????git?add?.?&&?git?commit?-m?'master...'

????????//在master?合并?dev?分支

????????git?merge?dev

????????/*

????????????Auto-merging?a??//自动合并a

????????????CONFLICT?(content):?Merge?conflict?in?a?//?内容冲突

????????????Automatic?merge?failed;?fix?conflicts?and?then?commit?the?result.?//?解决冲突?,并且提交结果

????????*/

????????//?如何解决冲突??

????????????????1.查看冲突文件,并通过协商解决该冲突

????????????????cat?a?

????????????????/*

????????????????????<<<<<<<?HEAD??(HEAD?指向当前分支master->)

????????????????????master...

????????????????????=======

????????????????????dev....

????????????????????>>>>>>>?dev

????????????????????master...,dev...?//最终达成一致的解决方案,以这行代码为准

????????????????*/

????????????????git?status

????????????????/*

????????????????????On?branch?master

????????????????????You?have?unmerged?paths.

????????????????????(fix?conflicts?and?run?"git?commit")

????????????????????(use?"git?merge?--abort"?to?abort?the?merge)??//放弃合并

????????????????????Unmerged?paths:

????????????????????(use?"git?add?<file>..."?to?mark?resolution)?//?提交最终修改的a文件

????????????????????????????both?modified:???a

????????????????????no?changes?added?to?commit?(use?"git?add"?and/or?"git?commit?-a")

????????????????*/

????????????????2.?git?add?.?//?提交修改a文件?

????????????????git?status

????????????????/*

????????????????????On?branch?master

????????????????????All?conflicts?fixed?but?you?are?still?merging.

????????????????????(use?"git?commit"?to?conclude?merge)

????????????????????Changes?to?be?committed:

????????????????????????????modified:???a

????????????????*/

????????????????3.?git?commit?-m??'合并dev分支,解决冲突a文件'

????????//?master分支指向最新的版本(冲突解决的版本?),但是dev分支?还是指向之前的版本。需要将dev的分支移动也指向最新的版本,(???会不会冲突呢?不会!)

????????cat?a?

????????/*

????????????master...,dev...

????????*/

????????

????????//切换到dev

????????git?checkout?dev

????????cat?a

????????/*

????????????dev...

????????*/

????????git?merge?master?

????????cat?a

????????/*

????????????master...,dev...

????????*/

????????git?branch?-v

????????/*

????????????*?dev????f90becf?合并dev,解决冲突文件a

??????????????master?f90becf?合并dev,解决冲突文件a

????????*/

????实验13:?两个分支不同文件合并会不会产生冲突??(不会)

????????场景:每个分支对不同文件有不同的实现?,前提是分支指向的版本之间没有时间关系

????????

????????//dev分支对新建c文件

????????git?checkout?-b?dev

????????touch?c?&&?echo?'cccc'?>>?c

????????git?add?.?&&?git?commit?-m?'dev...'

????????//master分支新建b文件

????????git?checkout?master

????????touch?b?&&?echo?'cccc'?>>?b

????????git?add?.?&&?git?commit?-m?'master...'

????????//在master?合并?dev?分支

????????git?merge?dev

????????/*??不会产生冲突?因为不同文件

????????????会打开vi编辑器?要求输入版本说明,证明有一个新的版本生成(同时保留master?的?b文件和dev的c文件)

????????????master指向最新的commit?,但是dev还是之前的commit?

????????????所以需要?dev?指向最新的commit?

????????*/

????????//dev合并最新的commit?

????????git?checkout?dev

????????git?merge?master?

????????git?branch?-v

????????/*

????????????*?dev????32854c1?Merge?branch?'dev'......

??????????????master?32854c1?Merge?branch?'dev'......

????????*/

????实验14:??两个分支同一文件不同行有不同实现,合并会不会产生冲突?(也会产生冲突)

????实验15:??两个分支同一文件完全一致,合并会不会产生冲突?(不会产生冲突)

????总结:

????????1.冲突的怎么产生的?

????????????前提:两个版本之间没有时间顺序

????????????merge?合并的时候计算机会尝试自动合并,但是在遇到同一个文件的时候,不知到怎么合并,所以提示冲突

????????????需要人为介入来解决冲突

????????2.?两个没有时间关系的分支合并?,一定会产生新的提交版本(冲突后的版本,未冲突的版本),

???????????被合并的版本会移动到主动发起合并的分支上

/git?版本前进和后退///

????版本前进

????????git?reset?--hard?HEAD^?撤销到上一个版本

????????git?reset?--hard?HEAD^^?撤销到前两个版本

????????git?reset?--hard?HEAD~n?撤销到前n版本

????????HEAD?--》?分支?--》?最新的commit?sha1

????版本后退?

????????git?reset?--hard?版本(sha1)

????????需要借助良好的注释说明

????????git?reflog?--》?查看所有的操作记录?


?

/游离操作///

????checkout

????????1.?git?checkout?分支?--》切换分支

????????2.?git?checkout?-b?分支?--》?创建并切换

????????3.?git?checkout?--?文件名??--》检出文件?

????????????补充:git?checkout?--?文件名?检出实验

????????4.?git?checkout?sha1???

????????????/*

????????????????You?are?in?'detached?HEAD'?state.?You?can?look?around,?make?experimental

????????????????changes?and?commit?them,?and?you?can?discard?any?commits?you?make?in?this

????????????????state?without?impacting?any?branches?by?switching?back?to?a?branch.

????????????????If?you?want?to?create?a?new?branch?to?retain?commits?you?create,?you?may

????????????????do?so?(now?or?later)?by?using?-c?with?the?switch?command.?Example:

????????????????git?switch?-c?<new-branch-name>

????????????????Or?undo?this?operation?with:

????????????????git?switch?-

????????????????Turn?off?this?advice?by?setting?config?variable?advice.detachedHead?to?false

????????????????HEAD?is?now?at?abc9b1a?version?4

????????????????1.你处于独立的状态(游离状态)

????????????????2.可以执行写写操作,但是写操作必须提交??(commit--?新的sha1)

????????????????3.入提交了写操作,必须起一个新的分支指向于这个sha1

????????????????4.在游离状态下未作任何操作?可以使用git?checkout?master??切出游离状态

????????????*/

?????????在游离状态下做了版本提交?

?????????git?add?.

?????????git?commit?-m?''??-->?sha1

?????????git?branch?新分支名?sha1???

?//?保存现场?还原现场?///

????规范:

????????1.建议(可以不遵守):一个功能在没有开发完全的情况下不要commit?

????????2.规范(必须遵守):如果两个分支之间处于不同的commit?阶段,当前分支在没有commit?的情况下不能直接切换到其他分支

????实验?16:?不可以切分支的情况?

????????mkdir?test?&&?cd?test?&&?git?init

????????touch?a?

????????git?add?.?

????????git?commit?-m?'init'

????????//创建新分支

????????git?checkout?-b?dev?

????????//在dev上做操作

????????echo??'dev?...'?>>?a???//能切分支?

????????git??add?.?????????????//能切分支

????????git?commit?-m?'dev?...'//能切分支?

????????echo?'dev?xxx'?>>?a????//不能切

????????/*

????????//如果切过去?a文件的内容将丢失

????????error:?Your?local?changes?to?the?following?files?would?be?overwritten?by?checkout:

????????????????a

????????//想切分支?1.提交?2.保存现场????????

????????Please?commit?your?changes?or?stash?them?before?you?switch?branches.Aborting

????????*/

????????//保存现场

????????git?stash

????????//查看保存的现场

????????git?statsh?list

????????/*

????????????stash@{0}:?WIP?on?dev:?a581bd6?dev?version?1

????????*/?????????

????????//还原现场

????????git?stash??apply?/?pop?

????????/*

????????????apply?:还原现场

????????????pop?:??还原现场,还能将保存的该现场删除

????????*/


?

????????//删除现场

????????git?stash?drop?stash@{2}?

????????/*

????????????不能连续还原两个现场

????????*/

???实验17:还原现场冲突

????????场景:基于一个commit?

????????vi?a??-->?第二行?xxx

????????//保存现场

????????git?stash???

????????vi?a?-->?第二行?ooo

????????git?add?.

????????git?commit?-m?'第二行ooo'

????????//还原现场

????????git?stash?apply?

????????/*

????????????Auto-merging?a

????????????CONFLICT?(content):?Merge?conflict?in?a

????????????冲突:?现场的第二行和版本中a文件的第二行冲突

????????*/

????????//解决冲突

????????vi?a??--》?修改冲突的行

????????git?add?.

????????git?commit?-m?'解决冲突'

///?git?追责?


?

????git?blame?文件名??--》?看这个文件的每一行代码都是谁写的?

????/*

????????59e92fc2?(Yanzhijie?2021-05-25?10:44:42?+0800?1)?111

????????65881bbf?(Yanzhijie?2021-05-25?10:45:11?+0800?2)?222

????????dcf6d44f?(Yanzhijie?2021-05-25?10:45:22?+0800?3)?333

????*/

??github?//

????1.?创建github账号

????????name

????????email(必须真实的,发邮:重置密码?长时间不登陆的话需要发送登录验证码)

????2.实验18:创建一个github公共仓库(public?共有?private?私有?)

????????两种选择:

????????????1.勾选readme

????????????2.不勾选readme

????推送协议:

?????????/*

????????????https:?以这种方式推送服务器

????????????????定期推送需要让输入账号和密码?

????????????ssh?:非对称密钥对?(私钥:本地??、公钥:用户、github仓库)建议

????????????????本地私钥???---》?gihub仓库的公钥

????????????????本地私钥???---》?gihub用户公钥(多个?)

????????????配置私钥和公钥

????????????1.本地?执行?ssh-keygen?-t?rsa?生成公钥私钥

????????????????用户家目录下生成????

????????????????????.ssh/

????????????????????????id_rsa??-->?私钥

????????????????????????id_rsa.pub?-->?公钥

????????????2.将公钥配置到github?用户下,以后本地和github账户下的人一个仓库都可以免密钥登录????????????

????????*/????????


?

????3.不勾选readme创建仓库,本地链接远程仓库

????//ssh

????????echo?"#?test1"?>>?README.md

????????git?init

????????git?add?README.md

????????git?commit?-m?"first?commit"

????????git?branch?-M?master

????????git?remote?add?origin?git@github.com:XuanqiYan/test1.git

????????git?push?-u?origin?master:master

????????//推送失败?原因没有配置ssh?密钥

????????//配置密钥

????????git?push?-u?origin?master:master

????????/*

????????????-u?:?将本地的master?和远程?master?建立关联?并缓存

????????*/????

????????touch?b??&&?echo?'bbb'?>>?b

????????git?add?.?&&?git?commit?-m?'新建b'

????????git?push?--》?ok?

????4.?勾选readme.md?使用ssh

????????注意:服务器已经形成了一个带版本的git仓库,不需要在本地?执行?git?init?等操作,只需要将

??????????????这个仓库克隆下来就可以

????????git?clone??git@github.com:XuanqiYan/demo.git??

????????cd?demo

????????touch?a??&&?echo?'aaaa'?>>?a?

????????git?add?.

????????git?commit?-m?'新建a'

????????git?push?//????用什么协议?ssh??


?

????????git?remote??show?--》?查看本地有几个远程仓库

????????/*

????????????origin?:?一个远程库

????????*/

????????git?remote?show?origin??--》?查看origin?远程库的具体信息

????????git??branch?-av?

????????/*

????????????$?git?branch?-av

????????????????*?master????????????????b41e9fb?xinjian?a

????????????????remotes/origin/HEAD???->?origin/master??追踪分支

????????????????remotes/origin/master?b41e9fb?xinjian?a?追踪分支

????????????本地分支?--??追踪分支??--?远程分支

????????*/?

????????注意:

?????????如果本地分支master?和远程分支master?交互后,会在本地产生追踪分支?remotes/origin/master

?????????这个分支是可以切过去的,处于一种游离状态

?????????追踪分支的作用:

????????????本地和远程交互都需要通过这个追踪分支

????????????push?推送

????????????????本地master?-->??remotes/origin/master?-->?远程master

????????????pull?拉取

????????????????远程master?-->???remotes/origin/master?-->?本地master

????实验19?:了解追踪分支

????????场景:?建立新的远程库(勾选readme),本地clone?远程库

????????git?branch?-av

????????/*????

????????????*?master????????????????4ee520a?Initial?commit

??????????????remotes/origin/HEAD???->?origin/master

??????????????remotes/origin/master?4ee520a?Initial?commit

????????????结论:master?主分支?和?master的追踪分支同时指向同一个commit?

????????*/?

????????//master?做一次提交

????????touch?a?&&?echo?'aaa'?>>?a

????????git?add?.?&&?git?commit?-m?'version?1?'

????????git?status

????????/*

????????????On?branch?master

????????????Your?branch?is?ahead?of?'origin/master'?by?1?commit.?//master?分支?领先追踪分支以一个commit?

????????????(use?"git?push"?to?publish?your?local?commits)

????????????nothing?to?commit,?working?tree?clean

????????*/??

????????git?branch?-av

????????/*

????????????master????????????????438da12?[ahead?1]?version?1?新建?a文件

????????????remotes/origin/HEAD???->?origin/master

????????????remotes/origin/master?4ee520a?Initial?commit

????????*/

????????//master?再次做提交??发现master?比?追踪分支?领先2个commit?

????????//做push?推送?

????????git?push?--》?将本地master?两个版本?提交到远程仓库了?

????实验20:?拉去?git?pull

????????场景:?github官网直接在远程?仓库的master分支上做了一个新的?commit

??????????????远程master?领先本地master?一个commit?

????????????如何知道远程分支领先本地分支

????????????git?remote?show?origin?

????????????/*

?????????????????(local?out?of?date)?本地落后

????????????*/

????????????//执行拉取

????????????git?pull?

????????????/*

????????????????git?pull???=?git?fetch?(拉取)?+?git?merge?(合并)

????????????*/

????????场景:?github官网直接在远程?仓库的master分支上再做了一个新的?commit??????

????????????git?fetch

????????????/*

????????????????From?github.com:XuanqiYan/abc

????????????????b054bd5..e1f4d2e??master?????->?origin/master?远程master?到?本地?追踪分支?

????????????*/

????????????git?branch?-av

????????????/*

????????????????*???master????????????????b054bd5?[behind?1]?c??//?落后一个版本

????????????????????remotes/origin/HEAD???->?origin/master

????????????????????remotes/origin/master?e1f4d2e?新建的xxx.txt

????????????*/

????????????git??merge??//?注意:后面没有分支名?代表默认合并的是其追踪分支?

????实验21:模拟多人推送代码(解决冲突)

????????场景:模拟多用户

????????????远程新建仓库?克隆到本地的两个文件夹(第二个需要重命名)

????????????分别进去两个本地仓库?做用户区分

????????????git?config?--local?user.name?''

????????????git?config?--local?user.email?''

????????????test??-->?lisi

????????????test1?-->?zhangsan

????????步骤:

????????????lisi操作:lisi?提交并执行push?推送?

????????????????touch?a??&&?echo?'lisi....'??>>?a

????????????????git?add?.?&&?git?commit?-m?'lisi?a文件'

????????????????git??push?

????????????zhangsan操作:

????????????????touch?a??&&?echo?'lisi....'??>>?a

????????????????git?add?.?&&?git?commit?-m?'zhangsan?a文件'

????????????????git?push??-->?报错

????????????????/*

????????????????????报错原因:在执行git?push?之前?必须拉取?git?pull

????????????????????总结:?多人使用仓库?每个人在执行推送之前都要事先拉去?别人的代码?到本地?

????????????????*/

????????????????//执行git??pull???==?fecth?+?merge

????????????????git?branch?-av

????????????????/*

????????????????????*???master????????????????a115bfd?[ahead?1]?zhangsan?的?a?文件

????????????????????????remotes/origin/HEAD???->?origin/master

????????????????????????remotes/origin/master?f803d1e?Initial?commit

????

????????????????*/

????????????????git?fectch?

????????????????git?branch?-av

????????????????/*

????????????????????master????????????????a115bfd?[ahead?1,?behind?1]?zhangsan?的?a?文件

????????????????????remotes/origin/HEAD???->?origin/master

????????????????????remotes/origin/master?cf0a82c?lisi?的a文件

????????????????*/

????????????????git?merge??

????????????????/*

????????????????????自动合并产生冲突?

????????????????*/

????????????????解决冲突

????????????????vi??&&?git?add?.?&&?git?commit

????????????????//张三继续推送

????????????????git?push??(实际推送的是两个commit)

????????

????????lisi?操作:(拉取master上最新的两个commit?并合并)

????????????git?fetch?

????????????git?branch?-av

????????????/*

????????????????*??master????????????????cf0a82c?[behind?2]?lisi?的a文件

????????????????????remotes/origin/HEAD???->?origin/master

????????????????????remotes/origin/master?f5a4b40?解决冲突

????????????*/

????????????git?merge?//不会产生冲突(因为?fast-forward)

????实验22:本地新建dev分支?但是远程没有dev分支?完成推送?

????????场景:基于上面实验21场景

????????用户lisi?操作:

????????????git?checkout?-b?dev

????????????echo?'lisi?dev分支操作'?>>?dev_a.txt

????????????git?add?.?&&?git?commiy?-m?'lisi?dev分支的?version?1'

????????????git?branch?-av

????????????/*

????????????????*??dev???????????????????02dd50a?lisi?dev?version?1

????????????????????master????????????????47130ce?合并lisi的?b?文件

????????????????????remotes/origin/HEAD???->?origin/master

????????????????????remotes/origin/master?47130ce?合并lisi的?b?文件

????????????????注意:?并没有?remotes/origin/dev?这样的追踪分支,因为没有交互不会产生

????????????*/?

????????????//将本地dev分支推送到远程(没有dev)

????????????git?push??--》》?第一次?no??

????????????/*

????????????????fatal:?The?current?branch?dev?has?no?upstream?branch.

????????????????To?push?the?current?branch?and?set?the?remote?as?upstream,?use

????????????????git?push?--set-upstream?origin?dev

????????????*/??

????????????git?push?-u?origin?dev:dev??-->?第二次?ok

????????????/*

????????????????远程仓库?出现dev?分支了?

????????????????还出现??dev?had?recent?pushes?less?than?a?minute?ago??(compare?可以将远程的master?和?新的dev?进行合格的提示?)????

????????????*/??

????????????//?本地dev在形成版本

????????????echo?'lisi?dev分支操作'?>>?dev_b.txt

????????????git?add?.?&&?git?commiy?-m?'lisi?dev分支的?version?2'?

????????????git?push??--》?ok?

????????????git?branch?-av

????????????/*

????????????????*???dev???????????????????02dd50a?lisi?dev?version?1

????????????????????master????????????????47130ce?合并lisi的?b?文件

????????????????????remotes/origin/HEAD???->?origin/master

????????????????????remotes/origin/master?47130ce?合并lisi的?b?文件

????????????????????remotes/origin/dev????02dd50a?lisi?dev?version?1

????????????????????//新出现的dev的追踪分支?

????????????*/

????实验23:远程dev分支但是本地没有dev分支,拉取dev到本地

????????场景:接实验22

????????//拷贝zhangsan的库

????????cp?-r?./test1?./test2

????????cd?test1

????????//处于?master?分支?本地并没有?dev和?dev的追钟分支

????????git?fetch?

????????git?branch?-av

????????/*

???????????*?master????????????????47130ce?合并lisi的?b?文件

????????????remotes/origin/HEAD???->?origin/master

????????????remotes/origin/dev????ef41d2a?lisi?dev?version?2?//新出现的追踪分支

????????????remotes/origin/master?47130ce?合并lisi的?b?文件??

????????????fetch作用:

????????????????1.?master?执行的fetch??会把master的最新的commit?拉取下来?,但是master没有新的commit?

????????????????2.?fetch?也会对比远程仓库的追踪分支,将没有的追钟分支拉到本地?并且关联

????????????????3.?本地存在?/origin/dev?但是还没有?dev分支?

????????*/

????????//建立dev?分支

????????git?checkout?-b?dev?

????????git?branch?-av

????????/*

????????????*???dev???????????????????47130ce?合并lisi的?b?文件??

???????????????//?并没有?ahead?behind?2??证明:dev分支和?orgin/dev?并没有任何关联关系?

????????????????master????????????????47130ce?合并lisi的?b?文件

????????????????remotes/origin/HEAD???->?origin/master

????????????????remotes/origin/dev????ef41d2a?lisi?dev?version?2

????????????????remotes/origin/master?47130ce?合并lisi的?b?文件

????????*/
?

????????//重新建立?dev?并和?origin/dev?建立追踪关系

????????git?checkout?-b?dev?--track?origin/dev

????????git?checkout?-b?dev??origin/dev
?

/?git?变基?/

????git?merge?被合并分支

????git?rebase?被变基分支?(灵活)

????实验24:?变基操作

????????场景:?

????????????版本????????????????????????????????????分支???

????????????init???1??????????????????????????????-->master

??????????????|?-->?version?test????2?????????????-->?test

??????????????|?-->?a.txt?3?-->?b.txt?4-->?c.txt?6??-->?dev??

????????????//在test?分支合并?dev分支

????????????git?checkout?test

????????????//merge?合并

????????????git?merge?dev??//时间顺序?有可能在看日志的时候不一定符合逻辑顺序

????????????git?log??

????????????/*

????????????????54f3211?-?Yanzhijie?,53?seconds?ago?:?test分支?使用?merge?方式合并?dev?分支

????????????????7f94cf2?-?Yanzhijie?,2?minutes?ago?:?c.txt

????????????????cae4e98?-?Yanzhijie?,2?minutes?ago?:?b.txt

????????????????85ddd43?-?Yanzhijie?,3?minutes?ago?:?a.txt

????????????????2f1fa2f?-?Yanzhijie?,3?minutes?ago?:?version?test

????????????????35475d7?-?Yanzhijie?,5?minutes?ago?:?init

????????????*/

????????????//?test?变基合并?dev

????????????git?rebase?分支?//?逻辑顺序?

????????????/*

????????????????Successfully?rebased?and?updated?refs/heads/test.

????????????????merge?:?时间顺序?还会产生新的commit?

????????????????rebase?:?逻辑顺序?不会产生新的commit?

????????????????注意:

????????????????????1.从代码层面来说这两种方式没有什么区别

????????????????????2.merge?合并会有新的commit??但是?rebase?不会,merge?合并完对日志查看不太友好

????????????????????3.日志的顺序决定了?版本撤销和前进的顺序

????????????*/

????????????git?log

????????????/*

????????????????a0297d6?-?Yanzhijie?,3?minutes?ago?:?test.txt

????????????????a7fc178?-?Yanzhijie?,3?minutes?ago?:?c.txt

????????????????1aca675?-?Yanzhijie?,3?minutes?ago?:?b.txt

????????????????d43b86b?-?Yanzhijie?,3?minutes?ago?:?a.txt

????????????????c9c7ea5?-?Yanzhijie?,4?minutes?ago?:?init

????????????*/

????实验25:变基合并冲突?和解决冲突

????????场景:

????????//master?分支?变基合并dev

????????git?rebase?dev

????????/*

????????????Could?not?apply?687e70b...?master?1

????????????CONFLICT?(add/add):?Merge?conflict?in?a.txt

????????????Auto-merging?a.txt

????????*/????

????????//解决冲突?

????????vi?冲突文件?解决冲突

????????git?add?.

????????git?rebase?--continue??//rebase?会产生新的版本

????????git?rebase?--abort?//?可以在变基的过程中任何一个时间点执行这个命令来放弃变基,回到变基之前的状态

?????实验25:变基合并冲突?和放弃解决冲突

????????场景:

????????????init?

??????????????|??-->?a.txt??-->?mster?分支?第一行'master?...'

??????????????|??-->?a.txt??-->?dev?分支?第一行'dev...'

???????????//?mster分支变基合并dev

???????????git?rebase?dev

???????????//放弃变基

????????????git?rebase?--abort?

???????????vi?冲突文件

???????????//放弃变基

????????????git?rebase?--abort?

????实验26:?多次commit?合并成一个commit?

????????git?log

????????/*

????????????458138d?-?Yanzhijie?,6?seconds?ago?:?init

????????????14d88b6?-?Yanzhijie?,34?seconds?ago?:?init

????????????6cab2b6?-?Yanzhijie?,72?seconds?ago?:?init

????????*/

????????git?rebase?-i?HEAD~2

????????/*

????????????s?:?合并到下一个

????????????d?:?删除

????????*/

??git父子仓库??///

????项目背景:父库A?需要引用?子库B?(B中的代码是A的一个模块或者是文件夹)

????准备:

????????创建了两个独立的远程仓库A和B

????????注意:

????????????如果在同一个github账号下,不需要配置新的ssh协议?

????????????如果不在同一个github账号下,本地电脑需要和另一个ssh配置协议

????实验27操作:

????????//将A库拉到本地

????????git?clone?git@github.com:XuanqiYan/A.git

????????//本地A库中添加远程B库?

????????git?submodule?add??ssh地址

????????/*

????????????1.?将远程的B库下载到本地的当前的文件夹中?

????????????2.?生成一个配置文件?.gitmoudules?

????????????????[submodule?"B"]

????????????????????path?=?B

????????????????????url?=?git@github.com:XuanqiYan/B.git

????????????3.?只是在本地A/B建立了父子关系?,但是远程A/B是相互独立的?

????????*/

????????//如何让远程的A库知道B库是子库

????????git?add??.

????????git?commit?-m?'A/B建立关系'

????????git?push?

????????//如果B库有跟新,那么对于父仓库是否可以感知到跟新?

????????远程仓库A?不会主动感知远程B的跟新

????????本地仓库A?不会主动感知远程B的跟新

????????//如果让本地A拉取远程B的最新内容

????????cd?A/B

????????git?pull? ?

????????//如何让远程A库更新远程B的内容

????????cd?A/

????????git?add?.

????????git?commit?-m?'更新B'

????????git?push?

????实验28:面对多个子库怎么批量更新

????????cd?A/

????????git?submodule?foreach?git?pull??//遍历每一个子库?然后执行拉取子库最新内容

????????//如何克隆一个带有子仓库的远程库

????????git?clone?ssh地址??--recursive??

????????//删除B库

????????git?rm?--cache?B

????????rm?-rf?B?

????????rm?-rf?.gitmodules

????????git?add?.

????????git?commit?-m?'删除B'

????????git?push?

????裸库

????????git?init?--bare?

????///?github?码云?gitlub??(服务器自己搭建)

??gitflow?工作流??///

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-10-07 14:01:24  更:2021-10-07 14:01:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/23 15:00:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计