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******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  #红色
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******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教程的一些学习笔记。如有错误,欢迎各位朋友指正呀~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容