git与github基础

主要是基于廖雪峰官网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******[email protected]"

--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  #红色
2-1

第二步:add操作

git add 3.txt  #将产生操作的文件 add 到暂存区 
git status    #绿色
2-2

第三步:commit操作

git commit -m "creat 3.txt"
#将操作最终提交给版本库,并对本次提交 -m 选项进行说明
git status  #白色 tree clean
2-3

通过上面三个过程可以知道git管理记录时,首先是在工作区实际对某些文本的操作(新建/修改/删除);然后将这些操作(注意是操作,比如增加了文本几行内容)记录传到暂存区(可以一次add多个);最后提交给git版本库,git通过有序得记录从文本创建到修改的操作过程的commit版本从而实现版本控制。


三步关系

复习一遍流程:修改3.txt文件

vim 3.txt  #增加2行内容
git diff 3.txt
  • 此时可以通过git diff命令将当前工作区文件与上一次commit版本比较,看一看具体改变了什么内容
    git diff
git add 3.txt
git commit -m "add 2 lines"
增加2行

如果是删除操作的话,要先在本地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
3.1-1
git checkout -- 3.txt
cat 3.txt
  • git checkout --命令用于撤销指定文件的工作区修改,恢复至上一次commit的版本情况
    3.1-2

如果是文件误删操作,也可以利用这种方法恢复。

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
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******[email protected]"
cat id_rsa.pub  
#若发现秘钥邮箱是其它用户的,按该目录不存在情况处理
  • 把公钥内容文本复制下来;
  • 登录到github官网(需要提前注册账号),在设置栏中选择ssh key;
    注意下,GitHub允许添加多个Key
  • 分别添加公钥名称与复制内容即可。

5.2 本地库实现远程同步push

  • 首先在github中新建一个仓库;
  • 然后回到git本地库中,将二者关联;
git remote add origin [email protected]: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 [email protected]: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教程的一些学习笔记。如有错误,欢迎各位朋友指正呀~

你可能感兴趣的:(git与github基础)