主要是基于廖雪峰官网git教程的学习笔记;感谢大佬们的分享,努力做一个海边拾贝的boy~
0、背景
Git是目前世界上最先进的分布式版本控制系统,用来托管代码。我的理解为
- 版本控制:可以追踪代码文件创建以来的历史记录。
- 分布式:代码文件可独立分布在每台用户计算机,为了用户合作方便,通常有一台充当“中央服务器”的电脑github,时刻更新最新的版本;用户想要复制或修改,直接从那里取一份到本地电脑处理即可。
1、git安装
Linux
若命令行输入git
,回车提示git未安装,输入下述命令直接安装即可。
sudo apt-get install git #适用于Debian或Ubuntu系统
Windows
进入git官网下载,安装(一路默认)即可。安装完成后,桌面鼠标右击,菜单中出现Git Bash Here
;点击会出现一个类似Linux控制台的窗口即表示安装成功。
小插曲:为了想从头演示一下,就把原来装好的git卸载了,重新下载练练手,可是发现今天官网下载速度巨慢......后来发现360软件管家有,几秒钟就下好了....
- 注意下:安装后需要配置下个人的用户信息,即昵称加邮箱(无特殊要求)
git config --global user.name "li"
git config --global user.email "12******79@qq.com"
--global
参数表示全局配置,以后在本台电脑使用git,都默认为上面的用户信息,在之后的文件管理中都会有记录的。
2、建立一个git本地仓库
又叫版本库/repository。本质上就像一个文件夹,区别在于可以受git进行版本控制等管理。
- 2.1、首先打开git bash,在指定路径创建一个文件夹
cd ~/Desktop/
mkdir git02 #目录名不要有中文
cd git02
pwd
此时创建的文件夹和桌面其它一般文件夹本质相同
- 2.2、git初始化
git init
ls -ah #查看包括隐藏文件的所有文件
发现当前目录下多了一个.git
的目录,表示初始化成功,已经建立好一个版本库了。
tips:可管理的文件类型只能是文本文件,因此适用于代码文件;不要使用windows记事本编写代码,推荐notepad++。
2、储存一个文件(三步走)
-
git status
命令返回当前版本库的状态,配合此命令会更好理解下面三步的意义。
第一步:操作文件
主要是修改增删,当然一开始有时是创建新文件;删除操作较特殊之后会说。
vim 3.txt #工作区新建一个文本文件
git status #红色
第二步:add操作
git add 3.txt #将产生操作的文件 add 到暂存区
git status #绿色
第三步:commit操作
git commit -m "creat 3.txt"
#将操作最终提交给版本库,并对本次提交 -m 选项进行说明
git status #白色 tree clean
通过上面三个过程可以知道git管理记录时,首先是在工作区实际对某些文本的操作(新建/修改/删除);然后将这些操作(注意是操作,比如增加了文本几行内容)记录传到暂存区(可以一次add多个);最后提交给git版本库,git通过有序得记录从文本创建到修改的操作过程的commit版本从而实现版本控制。
复习一遍流程:修改3.txt文件
vim 3.txt #增加2行内容
git diff 3.txt
- 此时可以通过
git diff
命令将当前工作区文件与上一次commit版本比较,看一看具体改变了什么内容
git add 3.txt
git commit -m "add 2 lines"
如果是删除操作的话,要先在本地
rm
删除,然后在git版本库中删除
rm 3.txt
git status
git rm 3.txt
git commit -m "remove 3.txt"
3、撤销修改
主要分为以下3中情况的撤销
3.1 工作区修改撤销
- 例如在上文基础上不小心删除3.txt的最后一行,但还没有add到暂存区
cat 3.txt
vim 3.txt
cat 3.txt
git status
git checkout -- 3.txt
cat 3.txt
-
git checkout --
命令用于撤销指定文件的工作区修改,恢复至上一次commit的版本情况
如果是文件误删操作,也可以利用这种方法恢复。
3.2 暂存区修改撤销
如果上述的误操作已经add了--
- 先使用
git reset HEAD
命令撤销add操作,恢复至工作区; - 再使用3.1的
git checkout --
命令恢复至原来版本。
vim 3.txt
git add 3.txt
git status
git reset HEAD 3.txt #撤销add
git status
git checkout -- 3.txt #撤销修改
3.3 commit修改撤销
如果已经不慎连续add、commit,即完全在版本库中提交了一个新的版本commit,可以使用第四点介绍的版本控制,直接回到上一版本commit即可。
4、版本控制
- 即返回修改之前的,即上一次commit的版本。
- 因为git有序得记录每次commit的版本操作内容,可以轻易的切换到历史版本。
vim 3.txt #删除最后一行
git add 3.txt
git commit -m "delete the last line"
- 这样自3.txt文件创建以来,该文件经历了两次修改,三次commit;
- 可以使用
git log
查看这三次commit记录
git log
返回所有的3条操作记录(最近到最远):有commit版本号、修改人、日期、修改说明
git log --pretty=oneline #简洁版 只有commit号与修改说明
git reflog #返回历史命令,也可以用来查找commit版本号
- 版本跳转方法:利用commit版本号即可
git reset --hard b739c6af #只需要前面几位即可
git reset --hard HEAD^ #回退上一版本
补充:标签tag
标签tag号本质上作用等同于commit版本号。只是前者可自己命名(V1.0,V2.0...),比后者好记的得多。
git tag v1.0 # 当前版本v1.0标签打好了
git tag #查看所有标签
git show v1.0 #查看该标签相关信息
#可根据历史commit号补标签,如下
git log --pretty=oneline --abbrev-commit
git tag v0.9 b739c6a
git tag -d v0.9 #删除标签
git push origin v1.0 #推送标签到远程,远程操作见下第五点
git push origin :refs/tags/v1.0 #删除远程标签
5、远程仓库 github
- 将本地git仓库与远程github库同步。这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作;
- github网站本质上应该就是一个远程服务器,提供本地Git仓库托管服务的。
- 在GitHub上免费托管的Git仓库,任何人都可以看到喔(但只有自己才能改)。所以不要把敏感信息放进去。
5.1 公钥配置
本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,因此需要在本地找到公钥交给github从而建立联系
cd ~/.ssh
# 如果发现该目录不存在 使用下一行代码即可生成
# ssh-keygen -t rsa -C "12******79@qq.com"
cat id_rsa.pub
#若发现秘钥邮箱是其它用户的,按该目录不存在情况处理
- 把公钥内容文本复制下来;
- 登录到github官网(需要提前注册账号),在设置栏中选择ssh key;
注意下,GitHub允许添加多个Key - 分别添加公钥名称与复制内容即可。
5.2 本地库实现远程同步push
- 首先在github中新建一个仓库;
- 然后回到git本地库中,将二者关联;
git remote add origin git@github.com:xiaobei1999/git02_dist.git
- 注意这里将远程库的名字惯例名为origin(实际人家叫git02_dist),方便操作;
GitHub给出的地址不止一个,还可以用https://github.com/xiaobei1999/git02_dist.git 类的地址
git push -u origin master
- 推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样;
- 从现在起,只要本地作了提交,就可以通过下面的命令把本地master分支(关于分支第六点会提到)的最新修改推送至GitHub
git push origin master
5.3 github仓库克隆到本地
假如在github中fork别人的库(在GitHub上可以任意Fork开源仓库)到自己的github仓库,再将其克隆到本地进行操作、修改之类的。
git clone git@github.com:xiaobei1999/git01
cd git01
ls
- 注意不能将github中别人的仓库直接克隆到本地。
github是全球通用的,有时可能国内连接稳定。国内的Git托管服务Gitee(gitee.com)与github发挥同样的功能,速度在国内会更稳定些。同一个本地库可以既关联GitHub,又关联Gitee。
6、分支branch管理
这是github的一大优势,分支管理十分高效,因此适合相关团队开发工作。因为以后对于我用的可能不是很多,就简单介绍一下吧~
首先要理解下述过程
- 如上.txt的操作,git会把commit看成点,git会将多次commit有序得串成一条时间线;这条线就是一条默认的、单独的分支,默认叫master;
- 基于当前最新一次提交建立一个分支,暂名为dev,与master独立;
- 独立的意思就是指在dev修改代码,提交后;master主支还保持在原来的状态。即dev分支比master主支领先一步;
- 此时可以切换回master主支,合并dev的修改,再删除dev;即实现了dev分支的全部作用。
一般开发中,master分支应该是非常稳定的,也就是仅用来发布新版本。开发者都是在dev中搞事情,每个人都有自己的分支,时不时地往dev分支上合并就可以了,最后合并到master中即可。
vim 4.txt
git add 4.txt
git commit -m "new 4.txt"
git branch #查看分支,当前应只有一个分支
创建一条新分支,并在该分支中进行修改
git checkout -b dev
#-b参数表示创建并切换,等同于下面两行代码
# git branch dev
# git checkout dev
git branch
vim 4.txt
git add 4.txt
git commit -m "add 1 line"
返回master 主支,完成合并
git checkout master
cat add #发现并没有dev的修改,需要合并
git merge dev
git branch -d dev #删除dev分支
git branch
- 合并特殊情况:master与dev分支都对同一文件进行各自的修改,这样合并就会产生一个冲突文件。需要对该文件手动修改成理想的结果再add、commit才可以,最后再删除分支即可。
如前所述
git checkout --
为撤销命令,容易记混。最新版本的git switch
命令也支持分支功能,也更好理解。但是我刚试了下,发现命令不存在。可能版本比较低的原因吧 2.20.1
以上是学习git教程的一些学习笔记。如有错误,欢迎各位朋友指正呀~