1.Git简介
Git官网
Git是一个免费的、开源的分布式版本控制系统
为什么需要版本控制:从个人开发
过渡到团队协作
2.Git安装、配置
2.1 Ubuntu 18.04
-
步骤1:
首先通过运行以下命令,确保您的系统和apt包列表完全更新:sudo apt-get update # 从服务器获取软件列表,并在本地保存为文件 sudo apt-get upgrade # 本地安装软件与本地软件列表对比,如果本地安装版本低,会提示更新
-
步骤2:
用git指令看看是否安装了Gitgit
-
步骤3:
如果没装,则输入下面的指令安装Gitsudo apt-get install git
-
步骤4:
装完以后,还可以用下面的指令,查看安装版本git --version
-
步骤5:
装成功之后,第一步就是设置用户名和邮箱,随便填即可。签名的作用只是区分不同操作者的身份,用户的签名信息在每一个版本的提交信息中能够看到,以此确定本次提交是谁做的。
Git首次安装必须设置一下用户签名,否则无法提交代码
。这里设置的用户名和邮箱都是
虚拟的
,Git也不会去验证这个邮箱,与你将来登录GitHub(或其他代码托管中心)的账号没有任何关系Ubuntu直接打开
终端
即可配置,而Windows需要在Git Bash 客户端
中输入指令进行配置git config --global user.name LinuxYao # 设置用户名为LinuxYao git config --global user.email LinuxEmail.com #设置邮箱为LinuxEmail.com git config --list #查看设置好的用户名和邮箱
配置完成后,会在家目录下生成一个
.gitconfig
文件(是隐藏文件夹,需要按下Ctrl + H
查看)
可以打开看一下,其实就是刚刚配置好的用户名和邮箱
2.2 Windows 10
-
步骤1
:去官网下载安装包,双击安装
-
选择VSCode作为Git的默认编辑器
-
选择只在
Git bash
的客户端中使用Git
如果选择第二个会改你的环境变量,好处是可以在cmd中使用Git,但是一般不会这么操作
-
勾上符号链接文件
-
点击安装
-
鼠标右键:选择
Git GUI Here
,不过一般没人用这个
-
鼠标右键:选择
Git Bash Here
,一般都用这个客户端
3. Git 基本操作
这里以Ubuntu系统为例,Windows同理,指令是完全相同的
只不过Ubuntu直接在终端
中输入指令即可,而Windows需要到Git Bash 客户端
中输入指令
3.1 初始化本地库
-
首先我们要新建一个文件夹,作为项目的目录
例如:这里我是在家目录下的Git-Space目录下,新建了一个名为
git-demo文件夹
,作为项目目录
-
右键在终端打开:进入
git-demo
这个项目目录现在git是管理不了这个目录的,因为没有这个目录的权限
需要先对这个目录进行
初始化本地库
的操作git init
执行完初始化操作之后,会在git-demo
目录下面生成一个.git
目录(也是隐藏文件夹,需要按下Ctrl + H
查看)
可以点开
.git
目录,查看一下里面的东西,看一下就行了,不要修改!!!!
3.2 查看本地库状态
-
初始化
好本地库以后,就可以查看这个本地库状态,同理必须先进入git-demo
这个项目目录,输入指令查看git status
状态提示:处于 master 这个分支,而且是一个空的本地库,没有任何文件需要提交
-
现在我们可以在项目下,新建一个文本文件
123.txt
,在这个文件中输入10行hello git !
并保存touch 123.txt sudo gedit 123.txt cat 123.txt #查看文件中的全部内容
这些 Linux指令 在Windows的
Git Bash 客户端
下也是可以用的
现在我们的项目目录下已经有了一个文件,再次查看本地库状态:
可以看到我们刚刚新建的123.txt
文件名现在是红色的也就是说,这个
123.txt文件
虽然已经有了,但是目前只是存在于工作区
,git从来没有追踪过这个文件! -
后面就需要对这个文件进行追踪,即
添加到暂存区
3.3 将本地文件:添加到暂存区
-
使用
git add
指令将本地文件添加到暂存区git add 123.txt
注意:因为Linux系统中换行符是LF,而Windows系统中换行符是CRLF。所以如果你是在Windows下面使用这个指令,这个时候可能会提示warning,因为git会帮助识别我们正在使用的系统,并自动转换换行符,这个warning不用管
-
已经将
123.txt文件
添加到暂存区了,再次查看本地库的状态:可以看到这个123.txt文件
由红变绿了,说明这个文件已经被git追踪到了,但是目前123.txt文件只是存在于暂存区
,暂存区里的文件是可以删掉的。
-
如果你不想让
123.txt文件
保存成一个历史版本,可以使用git rm --cached
指令将这个文件从暂存区中删掉
注意这个指令,只是将文件
从暂存区中删除
,并不会将其在工作区中删除也就是说
123.txt文件
还是老老实实存在于git-demo
这个项目目录下(工作区)可以看到
123.txt文件
又变红了
3.4 将暂存区的文件:提交到本地库
-
将暂存区的文件提交到本地库,才能形成一个自己的
历史版本
# git commit -m "版本日志信息" 文件名 git commit -m "my first commit" 123.txt
可以看到提交成功,一个文件被改变,10行内容被插入(就是123.txt文件中的10行
hello git !
)可以看到这次提交的版本号就是:a9b3876(前七位)
-
将暂存区的文件提交到本地库后,再次查看本地库的状态
-
可以用指令
git reflog
查看提交的版本信息:版本号(前七位) + 版本日志信息
-
可以用指令
git log
查看更加详细的
版本信息:版本号(完整版) + 版本日志信息 + 提交者
3.5 修改文件:模拟版本迭代
- 修改工作区中的
123.txt文件
,并再次查看本地库的状态:将前五行改成hello word !
会发现sudo gedit 123.txt cat 123.txt #查看文件中的全部内容 git status
123.txt文件
又变红了,而且提示这个文件被修改了,且修改了之后还没有被添加到暂存区
- 重新追踪这个文件,将其添加到暂存区,让他重新变绿:
git add 123.txt git status
- 重新提交该文件到本地库:
可以看到提示:5行新增,5行删除(因为git没有办法直接提示修改了几行)# git commit -m "版本日志信息" 文件名 git commit -m "my second commit" 123.txt
- 重新查看版本信息:可以看到,现在已经有2个版本了
- 注意:不管修改多少次,提交多少次,在本地的工作区永远只有一个
123.txt
,且它的内容是最后一次修改的
3.6 新老版本反复横跳
-
先用
git reflog
查看每个版本的版本号
可以看到现在的指针是指向第二个版本
-
如果我们想回到第一个历史版本,需要用到
git reset
指令# git reset --hard 要穿越回去的版本号:第一次提交的版本号 git reset --hard a9b3876
再次查看版本信息,可以发现,指针指向了第一个历史版本
然后我们在打开工作区下的123.txt
,发现其中的内容已经变回
成第一个版本的内容了
-
同理,我们也可以在穿越回到最新的版本!
# git reset --hard 要穿越回去的版本号:第二次提交的版本号 git reset --hard 02a1902
git 切换版本,不是复制出一个一个副本文件,本质上是在本地库的内存中记录了很多个版本信息的日志
然后通过移动head指针
,来切换不同的历史版本
4. Git 高级操作:分支
分支的好处:
-
可以同时推进多个功能的开发,最后再合并
-
在每个分支的开发过程中,如果某个分支失败了,也不会影响其他分支,失败的分支删了重写即可
4.1 查看分支
-
输入查看分支指令
git branch -v
可以看到当前只有一个主分支master
4.2 创建分支
- 输入创建分支指令:比如说发生了故障,要对代码紧急维修,可以创建名为
my-hot-fix
的分支
然后再次查看分支,可以看到,除了# git branch 分支名 git branch my-hot-fix
master主分支
,还有刚刚创建好的my-hot-fix分支
,并且这个分支会自动将主分支master上的内容复制一份
4.3 切换分支
- 输入切换分支指令:
然后再次查看分支,会发现# git checkout 分支名 git checkout my-hot-fix
*
指向了我们要去的my-hot-fix分支
这个时候修改本地库中的123.txt
文件,其实就是修改my-hot-fix分支
中的文件
比如,我们打开123.txt
,在最后一行添加一句my-hot-fix: arrived !
然后,我们再用git status
指令查看本地库状态可以看到,我们目前处于my-hot-fix分支
,并且检测到我们修改了123.txt
,且这个文件还没有被上传到暂存区
可以看到,目前# 上传到暂存区 git add 123.txt # 提交到本地库,生成历史版本 git commit -m "my-hot-fix commit" 123.txt
指针
指向的就是my-hot-fix分支
,所以本地库的123.txt
也就变成了my-hot-fix分支
中的文件
然后我们再切换回master分支,本地库的123.txt
就又变回了master主分支
中的文件
4.4 合并分支
- 输入合并分支指令:将指定的分支,合并到当前分支上
我们如果想让# git merge 分支名 git merge my-hot-fix
my-hot-fix
分支与当前的master主分支
合并
首先要确保自己当前现在处于master主分支
上,然后再输入指令即可
发现提示:新增了一行就是我们刚刚在my-hot-fix
分支上新增加的那句话,现在被添加过来了
这两份不同分支上的123.txt
文件是没有冲突的,所有可以直接合并
但是如果两个分支的同一个文件
有两套完全不同的修改,Git无法替我们决定使用哪一个,此时必须认为决定新代码的内容
4.5 冲突合并
-
为了产生冲突,这里我先修改一下
master主分支
上的123.txt文件
,在倒数第二行后面新增加一句master test !
然后老样子,添加暂存区,提交本地库# 上传到暂存区 git add 123.txt # 提交到本地库,生成历史版本 git commit -m "master test commit" 123.txt
-
然后切回
my-hot-fix 分支
,修改123.txt文件
,在倒数第一行后面新增加一句my-hot-fix test !
然后老样子,添加暂存区,提交本地库# 上传到暂存区 git add 123.txt # 提交到本地库,生成历史版本 git commit -m "my-hot-fix test commit" 123.txt
-
现在,我们已经对同一个文件都进行了修改,然后再次切回到master分支进行合并,可以看到发生了冲突
# 切回到master主分支 git checkout master # git merge 分支名 git merge my-hot-fix
可以查看一下本地库的状态,提示我们,这两个文件都发生了修改,git不敢帮我们自动合并
需要我们手动合并,打开123.txt
可以看到git帮我们自动标注了发生冲突的代码
然后我们手动修改,注意还要手动删掉那些特殊符号
注意1:这个时候,要手动将修改后的123.txt
提交到暂存区,上传到本地库
注意2:这个时候上传到本地库的指令,将不能带上文件名了
-
合并不会修改
my-hot-fix 分支
中的123.txt
:可以切回去查看
-
合并的本质也是移动
head指针
5. github基本教程
5.1 创建远程仓库
-
登录github官网
-
创建一个远程仓库
输入仓库名、选择权限:然后直接创建即可
可以看到生成了
https
和ssh
两种不同协议的链接
https:https://github.com/superyp2333/git-demo.git
ssh:git@github.com:superyp2333/git-demo.git
这两种链接,都是你这个远程仓库的链接,但是太长了,记不住怎么办?
可以给远程库起一个别名
,将来对远程库进行推送push和拉取fetch
的时候,就可以用这个别名进行推送和拉取
-
给远程库起一个别名:
这里我先对
https
协议的链接起别名:https://github.com/superyp2333/git-demo.git一般为了方便,我们都会将
远程库的别名
与本地库的项目目录名称
一致,所以为这里都叫它git-demo
# git remote add 远程库别名 远程库链接 git remote add git-demo https://github.com/superyp2333/git-demo.git # 查看远程库的别名 git remote -v
上面的提示的意思是:我们要对远程库进行推送push和拉取fetch
操作,都可以用git-demo这个别名
5.2 推送本地库到远程库
-
注意推送本地库到远程库的时候,
推送的单位是分支
,所以要先切换到想要推送的分支因为网络原因会经常失败,多试几次
# 切换到想要推送的分支,例如master分支 git checkout master # 确认当前所处的分支 git status #git push 远程库别名/远程库链接 分支,例如将master分支推送到刚刚创建好的远程库 git push git-demo master
注意到自从21年8月13后不再支持用户名密码的方式验证
了,需要创建个人访问令牌(personal access token) -
创建个人访问令牌(personal access token)
-
点击Settings
-
点击左侧的Developer settings
-
点击Personal access tokens(个人访问令牌)
-
点击Generate new token
-
设置token信息,我这里就设置了30天的有效期,
选项全勾上就完事儿了
!
点击Generate token生成令牌
-
得到生成的令牌、复制
-
利用用个人访问令牌(personal access token):将本地库推送到远程库
指令还是一样的
,需要填写用户名和密码,只不过密码用刚刚复制得到的那一串字母代替# 切换到想要推送的分支,例如master分支 git checkout master # 确认当前所处的分支 git status #git push 远程库别名/远程库链接 分支,例如将master分支推送到刚刚创建好的远程库 git push git-demo master
成功了!可以看到在我们的github仓库里面,已经有了
master分支
的123.txt
文件
点开这个文件,查看内容
我们可以点击右侧的笔
,在远程库上,对这个文件进行修改
在最后一行加一段
5.3 拉取远程库到本地库
-
在远程库上直接对文件进行了修改,导致本地库上的
123.txt
与远程库上的不一致了
这个时候就可以将远程库上的123.txt
拉取到本地库#git pull 远程库别名/远程库链接 分支,例如拉取到master分支 git pull git-demo master
拉取操作:会自动将master主分支
修改后的123.txt
上传到本地库,不需要重新add和commit
5.4 克隆远程库到本地文件夹
- 首先在本地随便找个位置新建一个文件夹,用于存放别人的远程库
例如,这里我在家目录下的Git-Space目录下,新建了一个git-copy文件夹
- 然后右键,在终端打开,进入这个目录
要clone别人的代码,首先需要拿到别人的远程库的链接(https或者ssh协议的都行)
然后直接输入命令,开始偷代码git clone https://github.com/superyp2333/git-demo.git
可以看到已经把别人的仓库,完全复制到本地了!
可以看到clone操作不仅会拉取代码,而且还自动初始化本地仓库
和创建别名(自动叫origin)
5.5 SSH免密登录
- 有点麻烦,以后再学
6. gitee基本教程
码云官网
gitee码云是国内的代码托管中心
注册登录
6.1 创建远程库
与github一样,可以看到生成了https
和ssh
两种不同协议的链接
https:https://gitee.com/superyp2333/git-demo.git
ssh:git@gitee.com:superyp2333/git-demo.git
6.2 复制github上的项目到码云
- 新建仓库,这个时候可以不输入仓库名字