Git

前面

视频地址
git init 初始化git仓库
初始化最直接的效果就是创建了.git这个隐藏目录(以点开头的都是隐藏目录,要用ls -la查看)
pwd 查看当前路径
ll .git/ 查看这个隐藏目录

设置签名
如果有项目级别又有系统用户级别,那么项目级别的生效,不会用用户级别

:set nu 这个指令可以显示行号,说明在vim编辑器里面

git add good.txt
git status
git rm –cached good.txt(退回去)
git status
git commit

查看历史纪录的几种不同方式

git log
git log --pretty=oneline 只查看一行日志
git log --oneline hash值 只显示一部分
git reflog 显示了我们到某一版本需要几步,能看到左右版本

前进后退历史版本操作的本质

git管理历史记录的时候有一个指针,指针的名字叫HEAD

基于所引值前进后退版本

后退
git reflog 使用git 命令进行操作的日志 包括当前步骤所在哪个版本(一个commit 产生一个版本, 指定版本回退只能回退到该commit) 以及操作的具体内容,这个能看到所有版本
版本回退后,仍然可以看到所有的版本记录 方便查看每个操作步骤所在的版本,可以根据版本号自由前进后退
git reset --hard 索引值 这样就能跳转到当前版本
cat good.txt 看一下当前版本的内容
git reflog
向前走
git reset --hard hash索引值

前进后退版本的其他方式(不常用)

使用^只能回退
git log --oneline 以一行的方式显示所有版本
git reset --hard HEAD^ 向回退一步
tail -n 3 good.txt 显示这个文件的最后3行(这个数字可以改,想看几行把数字改成几)

git log --oneline 只能显示当前所在版本和当前版本之前的版本
git reflog 能看到所有版本 当前版本,和当前之前的版本,和比当前版本新的版本都能显示,
git reset --hard HEAD^^^ 回到三个版本之前(向后退几个版本就写几个^)

git reset --hard HEAD~3 后退三个版本(后退几个版本数字上面填写几)

hard和soft以及mixed参数对比

git help 后可以加一个具体的参数,表示帮助命令,例如下面的:
git help reset 查看git的文档,这个文档是本地的文档

reset命令的三个参数对比
–soft参数 仅仅在本地库移动HEAD指针
–mixed参数 在本地库移动HEAD指针,重置缓存区
–hard参数 在本地库移动HEAD指针,重置缓存区,重置工作区

git reset --soft hash索引值 移动到制定版本
git reflog
cat good.txt
git status 命令用于显示工作目录和暂存区的状态。使用此命令能看到那些修改被暂存到了, 哪些没有, 哪些文件没有被Git tracked到。

永久删除文件后找回

git reset --hard HEAD 表示回退到当前版本,HEAD指向当前版本。如果你修改了一些代码,想去除,就可以用git reset --hard HEAD一次性去除。
git reflog

vim aaa.txt
新建aaa.txt 里面随便添加一些内容内容 aaa bbb
git add aaa.txt
git commit -m “new aaa.txt” aaa.txt
git status
rm aaa.txt 删除这个文件
ll 查看不到这个文件了
git status
git add aaa.txt
git status
git commit -m “delete aaa.txt” aaa.txt
git status
ll
git reflog 查看所有版本
git reset --hard hash上个版本的hash编码值 这样就回到没有删除aaa.txt的版本了
ll 又出现aaa.txt

该节总结:用切换到上一个旧版本的方法找回,删掉的文件

21添加到缓存区的删除文件找回

vim apple.txt 新建一个文件 里面随便写一些内容,然后:wq
ll 可以看到我们的这个文件
git add apple.txt 添加到缓存区
git commit -m “new apple.txt” apple.txt 添加到本地库
git reflog
有的时候我们删除的操作是
rm apple.txt
ll 查看不到了apple.txt了
git add apple.txt
git status
git reset --hard HEAD (git reseet --hard表示我们的缓存区和工作区都会被重置,都会被刷新,根据什么刷新呢,后面加上个HEAD,现在我们拿这个HEAD指针指向的版本,我觉得这个应该是当前版本,在这个版本上,这个apple.txt这个文件是存在的)
ll apple.txt文件又回来了
说来说去还是–hard这个参数的意思,它的意思是在我们本地库里面去移动指针,在暂存区里面去刷新,对我们的工作区也会刷新,暂存区和工作区都会刷新为我们指针指向的这个位置(版本),所以说我们没有提交到本地库,用这个–hard一样能找回来

22删除文件找回方式的小结

前提:删除前,文件存在时的状态提交到了本地库.操作 git reset --hard[指针位置]

  • 删除操作已经提交到了本地库: 指针位置指向历史记录
  • 删除操作尚未提交到本地库:指针位置使用 HEAD

23比较文件

ll
git status
vim apple.txt 修改文件
:set nu 把文件前面加上行号
:wq 修改其中一行信息后保存退出
git diff apple.txt 这时候文件有了修改,我们就可以使用这个命令,讲工作区的文件和暂存区的文件进行比较
里面显示中灰色代表没有变化的行,红色代表我们删除的行,绿色代表我们添加的行 ;其实我们并没有删除行,而是在行后面加了新的内容,但是对于git来说,它是以行为单位进行管理的,所以是相当于删除了原来的行,再新建了一行

git apple.txt 提交到缓存区
git diff apple.txt 再进行比较 发现没有区别
git diff HEAD apple.txt 用指针指向我们本地库的当前版本,这样我们就又看到区别了,这个时候就是和我们本地库的某一个版本就行比较
git diff HEAD^ apple.txt 和某一个历史版本进行比较,讲工作区中的文件和本地库历史记录比较

git diff 文件名

  • 将工作区中的文件和暂存区进行比较

git diff 本地库中历史版本 文件名

  • 将工作区中的文件和本地库历史记录进行比较

不带文件名比较多个文件
ll
vim good.txt 修改文件
:set nu 把文件标记上行号 第七行增加内容
:qw
git diff 因为先在我们的apple.txt的文件没有,所有显示的只是good.txt更改前后的差异
git diff HEAD 两个文件的差异都显示出来了,good.txt文件修改签后的差异 和apple.txt修改签后的差异,也就是说不指定文件名的时候,就可以比较当前工作区中的所有的文件

24分支概述

分支就是在版本控制过程中,使用多条线同时推进多个任务
master 版本库初始化好之后,本身就会有一个master分支,也可以叫做主干
feature_blue (想做一个蓝色皮肤的分支)分支喜欢用feature开头,分支开始的时候和master内容一样
feature_game (想做一个小游戏的分支)各个分支之间彼此独立,如果不做合并的话,他们互相之间是没有任何影响的,如果分支失败了,直接删掉重来就好了,对于主干没有任何影响,方便我们去试错,有些复杂的功能进行开发的时候,就需要我们进行尝试
如果分支开发好了,合并到主干上master上,这时候也就是我们版本的升级(例如1.0到2.0),(在我们合并分支后)我们主干运行的时候也有可能出现bug,出现bug的话,就需要我们及时的进行修复,我们修复bug往往会创建一个hot_fix这样一个分支(热修复,修复时服务器不停;修复时候服务器停掉,就是冷修复.我们线互联网项目基本上是24小时不停的),修复完,再合并回我们的主分支
Git_第1张图片
分支的好处
1.同时并行推进多个功能开发,提高开发效率
2.各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响.失败的分支删除重新开始即可.

25分支操作

git status 能看到我们在哪个分支上面 现在显示的是我们在master分支上
git branch -v 查看所有分支 ,并且能看到当前所在的分支
git branch 分支名 这个可以创建分支
git branch hot_fix 创建hot_fix这个分支
git branch -v 现在查看就发现有两个分支了 前面带星号* 并且名字是绿色的,代表当前所在的分支
git checkout hot_fix 切换到hot_fix 分支,名字可以用tab键补全,可以用这个切换任何分支
git branch -v 查看所有分支,也能看到当前我们所在的分支,带星号的 名字是绿色的代表我们现在所在的分支,最下面一行很长的是目录,代表当前所在分支的具体位置

分支操作 代码
创建分支 git branch [分支名] (想一下hot_fix分支的例子)
查看分支 git branch -v
切换分支 git checkout [分支名] (可以想一下主分支的例子)
合并分支 1.git checkout [被合并分支名] 2.git merge [有新内容的分支]
冲突的表现 <<<是当前分支的内容 , >>>是另一分支的内容
解决冲突 1.编辑文件,删除特殊符号,2.把文件修改到满意的程度,保存退出 3.git add[文件名] 4.git commit -m “日志信息”;注意:此时 commit 一定不能带具体文件名

git branch -v
ll
vim apple.txt
:set nu
修改第五行内容
git add apple.txt 提交到缓存区
git commit -m “test branch hot_fix” apple.txt 提交到本地库(-m “” 写的式提交时的备注信息)
git branch -v 刚开始的时候master和hot_fix是同步的,现在hot_fix向前推进了一个版本
合并分支,我们必须站在接受修改的那个分支上

  • 第一步:切换到接受修改的分支上(被合并,增加新内容)
  • 第二部:执行merge命令
    git branch -v 现在查看我们是在hot_fix分支上,我们想把hot_fix的修改合并到master上面,这个时候我们要先切换到master上面
    git checkout master 切换到master分支上
    git branch -v 查看所有分支,并且能看到当前在哪个分支上
    git merge hot_fix 把hot_fix分支合并到master上
    cat apple.txt 这时候就能看到合并后的内容了

26解决合并分支后产生的冲突

git branch -v 现在有两个分支hot_fix分支和master分支,现在我们在master分支上,分支冲突的意思是.我们两个分支都修改同一个文件时,合并的时候就不知道是谁合并谁了,因为上一节的时候 我们的master分支是没有变的,变得值是hot_fix分支,所以合并的时候是hot_fix合并到master分支上(这是我对冲突的理解).
vim good.txt 修改master分支里面的good.txt文件
:set nu 显示文件的行号
修改第九行 加上edit by master
:wq
git add good.txt 添加到缓存区
git commit -m “test conflict” good.txt 添加到本地库
git branch -v 查看所有分支,能看到我们当前分支在master上,现在我们的master就比我们的hot_fix向前先走一步
git checkout hot_fix 切换到hot_fix分支上
vim good.txt 修改hot_fix分支里的good.txt文件
:set nu
也改第九行 加上edit by host_fix
:wq
git add good.txt 添加到暂存区
git commit -m “test conflict hot_fix” good.txt 提交到本地库
git branch -v 查看所有分支,并查看当前所在分支,当前分支在hot_fix分支上,这两个分支都做了修改,是同一个文件的同一行,有不同的内容
git merge master 把master分支上的内容合并到hot_fix分支上,合并失败 (hot_fix|MERGING) hot_fix在合并中
ll 查看文件 并没有产生新的文件,还是只有两个文件,apple.txt和good.txt
vim good.txt
:set nu
Git_第2张图片
Git_第3张图片
:wq 当我们把这个文件修改好后,写入退出
git status 出现下图
Git_第4张图片
git add good.txt 提交到暂存区
git status 出现下图
Git_第5张图片
下面有两条语句,一条是后面加文件名的(失败),一个是后面没有加文件名的(成功)
Git_第6张图片
git status
Git_第7张图片

27Hash算法简介

28Git版本数据管理机制

1.svn集中式管理工具:增量式的版本控制,可以看作是一组是基本文件和每个文件随时间逐步累积的差异,能够很好的节约我们服务器的存储空间
2.git的文件管理机制:快照流,保存一个快照的索引,重复的文件会有指针指向之前的文件
3.git文件管理机制细节
Git_第8张图片
git log 可以看到所有的commit,每个commit后面会对应一个hash值

Git_第9张图片
Git_第10张图片

29git分支管理的本质是创建和移动指针

Git_第11张图片
Git_第12张图片

30GitHub账号注册

github注册链接
要先申请邮箱,最好不要用qq和163等邮箱,建议申请阿里的邮箱

31修改github账号头像

下图第一个框框是默认的头像
Git_第13张图片
Git_第14张图片
Git_第15张图片

32本地库和远程库交互方式回顾

Git_第16张图片

33为了测试远程交互初始化新的本地库

cd … 返回上一层目录
mkdir huashan 创建新的目录
cd huashan/ 进入这个目录,进入目录的时候,目录后面要加斜杠
git init 初始化
vim huashanjianfa.txt 新建这个文件
写入内容 华山剑法天下第一
:wq 保存退出
git add huashanjianfa.txt 提交到缓存区
git commit -m “test github” huashanjianfa.txt 添加到本地库

34创建远程库

先登陆到我们的github上
Git_第17张图片
Git_第18张图片
Git_第19张图片
Git_第20张图片
Git_第21张图片
Git_第22张图片
我们也可以用码云来来管理我们的代码,创建远程库,步骤都差不多

35在本地创建远程库地址别名

Git_第23张图片
Git_第24张图片
Git_第25张图片
git remoto -v 查看本地仓库关联的远程仓库情况
Git_第26张图片

36推送操作

git push origin master 推送 origin表示的是推送的仓库别名 master代表推送的分支是master
Git_第27张图片
Git_第28张图片
Git_第29张图片
Git_第30张图片

37克隆操作

ll
cd …
mkdir huashan_lhuc 创建这个目录
cd huashan_lhuc 进入这个目录
git clone 远程库的地址
ll 查看,本地有了huashan/这个目录
cd huashan/ 进入这个目录
ll 能看到有huashanjianfa.txt这个文件,这就是从远程库中下载来的
ls -a 我们还会看到.git/ 这个隐藏目录, .git/这个目录代表不需要我们自己对本地库初始化了,它已经替我们初始化好了
git remote -v 别名也已经创建好了
在这里插入图片描述
Git_第31张图片

38邀请令狐冲加入团队成员

Git_第32张图片
现在令狐冲在本地已经把远程库clone好了,现在在本做修改然后提交到本地库是可以的
vim huashanjianfa.txt
在这里插入图片描述
:wq
git add huashanjianfa.txt
git commit -m “test push” huashanjianfa.txt
git push origin master 因为用的是https协议,没有用ssh,所以每次提到远程库都要登陆
Git_第33张图片
因为现在令狐冲还不是团队成员,所以没有办法提交到远程库,必须要岳不群邀请他加入团队才可以
Git_第34张图片
下面是邀请步骤
Git_第35张图片
Git_第36张图片
在这里插入图片描述
Git_第37张图片
复制邀请的链接后,发送给要邀请的那个人
Git_第38张图片
Git_第39张图片
Git_第40张图片
点击接受以后就变成了我们这个团队的成员
Git_第41张图片
Git_第42张图片

39远程库修改的拉取

现在岳不群要拉取远程的库
Git_第43张图片
pwd 查看我们现在 在哪个分支上
在这里插入图片描述
cd …/…/huashan 退出来进入huashan这个目录
ll
cat huashanjianfa.txt
Git_第44张图片
远程库里是有两行内容的
Git_第45张图片
git fetch origin master 把远程库的内容抓取过来,读操作
cat huashanjianfa.txt 内容并没有变化
Git_第46张图片
git checkout origin/master 这样就能看到fetch下来的新内容
cat huashanjianfa.txt
Git_第47张图片
git checkout master
cat huashanjianfa.txt
git merge origin/master 把远程的master合并到本地的master
Git_第48张图片
cat huashanjianfa.txt 合并之后本地就有新的内容了
Git_第49张图片
cd …/huashan_lhuc/huashan/
vim huashanjianfa.txt 修改文件
Git_第50张图片
git commit -m “test ybuq pull” huashanjianfa.txt
git push origin master
cd …/…/huashan
Git_第51张图片
ll
vim huashanjianfa.txt 看到的还是原来的内容
在这里插入图片描述
:q
git pull origin master 这个是只读的操作不需要登陆
cat huashanjianfa.txt 看一下文件的内容 出现心的内容了
Git_第52张图片
当我们的操作的数据修改的比较简单的时候,不太会产生冲突的话,使用pull就可以,比较简介
如果我们为了保险,慎重起见,先用fetch抓取下来看一看,如果没有什么问题我们再合并的话, 那我们就拆开使用fetch+merge的方式.

40协同开发时冲突的解决

如果岳不群和令狐冲都是改同一个文件的同一个位置,就会发生冲突,只有先推送的那个人能推送到远程库里面,后推送的那个人就推送不上去,他必须先拉取下来,然后再推送,拉取的时候有岳不群的内容有令狐冲自己的内容,这个时候git就不能替我们做决定了,必须我们自己去决定,这个时候就是冲突,下面是冲突过程的演示
现在我们在岳不群这边,我们现在对文件做一些修改
vim huashanjianfa.txt
:set nu 把文件加上行号
在这里插入图片描述
:wq
git commit -m “edit by ybuq” huashanjianfa.txt 提交到本地库
Git_第53张图片
git push origin master 以岳不群的身份推送上去
Git_第54张图片
推送完成
Git_第55张图片
推送上来了
Git_第56张图片
Git_第57张图片
cd …
cd huashan_lhuc/ 换成令狐冲去登陆
ll
Git_第58张图片
cd huashan/
ll
cd huashan/
Git_第59张图片
ll
Git_第60张图片
vim huashanjianfa.txt
他也去改第二行
:set nu
在这里插入图片描述
:qw
git commit -m “test conflict” huashanjianfa.txt 提交到本地库,这里提交到各自的本地库是没有问题的,但是现在我们的令狐冲版本,已经比我们远程库落后一个版本了
Git_第61张图片
Git_第62张图片
这个时候github就不接受令狐冲的推送了,它认为发生了新的情况,而你还不知道,你必须在这个最新的情况下再做出修改才可以,接下来我们推送一下
git push origin master
在这里插入图片描述
Git_第63张图片
git pull origin master 先拿到这个远程的修改
Git_第64张图片
我们现在就处于这个冲突的情况
vim huashanjianfa.txt 进入这个文件里面
:set nu
Git_第65张图片
Git_第66张图片
git add huashanjianfa.txt 添加到暂存区
git commit -m “resolve conflict” 解决冲突后的提交,后面是不能加文件名的
git status
Git_第67张图片
git push origin master 推送到远程,到此推送就完成了
Git_第68张图片
到页面上确认一下
Git_第69张图片
Git_第70张图片

41跨团队协作操作演示

Git_第71张图片
Git_第72张图片
Git_第73张图片
以东方不败的省份gork一下
Git_第74张图片
Git_第75张图片
Git_第76张图片
cd …
ll
cd …
ll
mkdir huashan_east
cd huahsan_east/
ll
git clone 东方不败的远程地址
Git_第77张图片
Git_第78张图片
ls -la 克隆下来了
Git_第79张图片
cd huashan/ 进入这个目录里面
ls -la 可以看到,本地库也已经初始化好了
Git_第80张图片
vim huashanjianfa.txt 东方不败添加新的内容
:set nu
Git_第81张图片
:wq
git commit -m “kuihua” huashanjianfa.txt 提交到本地库
git push origin master 做推送(好像远程库内容修改了就要登陆账号,推送到远程库中就需要登陆账号)
Git_第82张图片
Git_第83张图片
已经推送上来了
Git_第84张图片
Git_第85张图片
Git_第86张图片
上面的那些步骤是本地修改,然后推送到远程
现在我们要做Pull Request
Git_第87张图片
Git_第88张图片
Git_第89张图片
Git_第90张图片
Git_第91张图片
Git_第92张图片
Git_第93张图片
Git_第94张图片
可以隔空对话
Git_第95张图片
Git_第96张图片
Git_第97张图片
Git_第98张图片
Git_第99张图片
点击Merge pull request 合并代码
Git_第100张图片
填写日志信息,然后confirm merge 合并成功
Git_第101张图片
Git_第102张图片
cd …
pwd 查看当前在哪个分支上
在这里插入图片描述
cd…
cd huashan
ll
Git_第103张图片
cat huashanjianfa.txt 这是岳不群这,还没有葵花宝典相关的内容
git pull origin master 拉取到本地,结束我们这个跨团队协作的过程
Git_第104张图片
cat huashanjianfa.txt
Git_第105张图片

42SSH免密登陆

cd ~ 先进入到用户的家目录
rm -r .ssh/ 把以前创建过的ssh目录删掉(没创建不用做这步)
ssh-keygen -t rsa -C 邮箱账号直接回车表示使用默认值
Git_第106张图片
这样就生成了一个.ssh目录
cd .ssh/ 我们进入这个目录里面
ll 可以看到,里面有两个文件
cat id_rsa.pub 查看这个文件,并复制这个文件内容
Git_第107张图片
Git_第108张图片
Git_第109张图片
Git_第110张图片
测试一下
cd /d/workspaces/GitSpaceVideo/huashan 回到我们的工作区,作测试
在这里插入图片描述
vim huashanjianfa.txt 随便给我们这个文件做一下修改
Git_第111张图片
git commit -m “test ssh login” huashanjianfa.txt
我们现在先不push
tig remote -v 现在我们这个push origin还是https这样的地址
Git_第112张图片
git remote add origin_ssh ssh的地址 我们要新建一个远程地址的别名
Git_第113张图片
Git_第114张图片
Git_第115张图片
ssh 这个别名创建好了
Git_第116张图片
git push origin_ssh master
Git_第117张图片
Git_第118张图片

43Eclipse中Git插件简介

Git_第119张图片

43到53关于Eclipse下使用git 略

54 Git工作流介绍

Git_第120张图片
Git_第121张图片

55分支实战说明

Git_第122张图片

56分支实战操作

57安装CentOS7

韩顺平Linux

58安装Gitlab前的准备和介绍

你可能感兴趣的:(Git)