【尚硅谷】Git与GitHub基础全套完整版教程笔记1-git简介&命令行操作

5 篇文章 2 订阅

相信大家对Git和GitHub并不陌生,但是在实际操作时可能会碰到问题,一时可能不知道如何下手,甚至不知道如何百度。这没关系!学习这份Git与GitHub基础全套完整版教程,让我们有个系统的认识,打开任督二脉。让我们开始吧。

目录

0 尚硅谷_Git&GitHub_前面的话

git学习大纲:

为什么要使用版本控制?

1 版本控制工具应该具备的功能

2 版本控制简介

2.1 版本控制

2.2 版本控制工具

3 Git 简介 

3.1 Git 简史 

3.2 Git 官网和 Logo

3.3 Git 的优势 

3.4 Git 程序安装 windows安装  

3.5 Git结构

3.6 Git和代码托管中心 

3.7 本地库和远程库

3.7.1 团队内部协作

3.7.2 跨团队协作 

4 Git 命令行操作 

4.1 本地库初始化

4.2 设置签名 (本地库初始化后要执行的)

4.3 基本操作(查看状态/提交暂存区和本地库/历史查看) 

4.3.1 状态查看

4.3.2 添加/撤回->暂存区

4.3.3 提交

4.3.4 查看历史记录(4种查询方法) 

4.3.5 前进后退 (3种方式) 

4.3.6 reset 命令的三个参数对比 

4.3.7 删除文件并找回

4.3.8 比较文件差异


0 尚硅谷_Git&GitHub_前面的话

git是一种版本控制工具,从这一点来说,和svn是同一类软件。进一步,svn是集中式版本控制工具,git是分布式版本控制工具。学习git之前,不需要学习svn,但是需要熟悉linux的操作基础

git学习大纲:

  • 1 版本控制
  • 2 Git简介
  • 3 Git命令行操作:git本地库初始化基本操作,分支的管理,远程库操作
  • 4 Git图形化界面操作
  • 5 Gitlab服务器环境搭建

为什么要使用版本控制?

从个人角度:在做项目时,涉及到很多方法,很多行代码,如果一点点去改代码会很乱,不利于我们的开发和进度。每一个历史版本都被记录,可以回到某一个历史状态,接着在这个历史状态下进行修改。通俗来讲就是可以回退和撤销操作

从团队合作角度:每一个都需要开发自己负责的功能,多个人在开发同一个项目时,需要操作同一个类,一般的服务器可能会直接覆盖,不利于团队开发。

1 版本控制工具应该具备的功能

  • 协同修改:多人并行不悖的修改服务器端的同一个文件。
  • 数据备份:不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。
  • 版本管理:管理迭代过程中的每一个版本。在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空间,提高运行效率。这方面 SVN 采用的是增量式管理的方式(每次只保存有修改的那一点点,查看文件的时候把修改的和之前的文件拼起来),而Git 采取了文件系统快照的方式(每次保存的是文件系统的快照)。
  • 权限控制:对团队中参与开发的人员进行权限控制。
  • 对团队外开发者贡献的代码进行审核——Git 独有(SVN不能接受没有授权的人员修改代码)。
  • 历史记录:查看修改人、修改时间、修改内容、日志信息。将本地文件恢复到某一个历史状态。
  • 分支管理:允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率(git简洁优雅)。

2 版本控制简介

2.1 版本控制

版本控制是思想,指在工程设计领域中使用版本控制管理工程蓝图的设计过程。在 IT 开发过程中也可以使用版本控制思想管理代码的版本迭代。

2.2 版本控制工具

  • 思想:版本控制
  • 实现:版本控制工具

(1)集中式版本控制工具:CVS、SVN、VSS……

工作原理:每一个开发人员是一个客户端,文件和版本信息是存储在服务器的,然后客户端和服务器进行交互。缺点:如果服务器一旦宕机,所有的历史数据就丢失了,那个本机(客户端)保存的只是当前的状态,这个我们叫单点故障

(2)分布式版本控制工具:Git、Mercurial、Bazaar、Darcs……(每个用户机也都有版本历史)意味可以本地库传本地。但是不建议这么做。

工作原理:(以git为例)每一个开发人员在本地就可以进行完整的版本控制,本地就有完整的历史。任何一个人都可以把数据传给别人,这样就避免了单点故障。备注:不太建议本地之间去互相传数据,还是需要使用远程库

3 Git 简介 

3.1 Git 简史 

看时间轴回顾git发展的历史。

(1)先从“Linux系统版本控制历史”开始,(【百度百科】Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。Linux具有开放源码、没有版权、技术社区用户多等特点,开放源码使得用户可以自由裁剪,灵活性高,功能强大,成本低。尤其系统中内嵌网络协议栈,经过适当的配置就可实现路由器的功能。这些特点使得Linux成为开发路由交换设备的理想开发平台。)刚开始,很多人贡献代码,Linus只能手动合并代码,随着系统越来越大,手动合并就不能解决这么庞大的工作了。

(2)2002年,有个商业公司提供了“商业软件:BitKeeper”,授权Linux社区免费使用这个版本控制系统,但不能进行破解。但是有个问题,有些社区人员不按常理出牌。

(3)开发Samba的Andrew试图破解这个协议,被发现之后,收回了免费使用权。2005年,Linus自己用c语言开发了一个分布式版本控制系统git。(历史充满了偶然)

(4)2008年,Github上线。

官网地址:https://git-scm.com/

Logo:(分支的特性)

3.3 Git 的优势 

  1. 大部分操作在本地完成,不需要联网(SVN如果断网了就不行)
  2. 完整性保证(提交每条数据进行hash运算)同一个数据不管进行hash运算多少次,得到的数据都是不变的;输入的数据稍微变一点,输出的数据可能就会变很多。
  3. 尽可能添加数据而不是删除或修改数据(很少有不可逆的操作)
  4. 分支操作非常快捷流畅(1因为用快照,2每个分支只是创建一个指针)
  5. 与 Linux 命令全面兼容(程序员的必备技能)

3.4 Git 程序安装 windows安装  

Windows安装地址

(linux直接yum install -y git)加-y自动选择y,全自动。

下面具体看windows系统安装过程:

1先从官网下载安装包 

2下面默认设置就行:下图(下一步)

3这个的下一步也使用默认 直接下一步

4 选择默认的文本编辑器

5 然后修改环境变量(第一“仅在Git bash中使用Git”,我们就选这个,这样做就完全够用了),下面选项第二个(“在Windows命令行也可以使用Git”,是被认为安全的,理论上是安全的,但是不排除特殊情况,建议不使用)

6 选择客户端本地库和远程库连接方式(1通用连接2使用Windows连接方式,相对来说会有一定的局限性)

7 选择换行符的方式(第一“行末换行符转换方式”,git检查文件时LF 转为 CRLF ,提交时相反,默认使用这个就行)

8 选择终端(第一:Git默认终端(是liunx命令),我们选第一个,默认值;第二:选择Windows终端(wind命令))

9 使用默认值,勾选第一和第二(第一:启用文件的缓存;第二:启用Git授权的管理器。选择第二个需要安装NET framework c4.5.1以上版本)

NET framework安装失败解决方案查看链接:

https://jingyan.baidu.com/article/fb48e8bee50ebf6e632e1464.html 

10 等待安装 

11 (1加载他的git Bash终端2查看更新的文档)

装完之后的效果:在任何一个windows文件夹下右键,可以看到Git GUI Here和Git Bash Here

3.5 Git结构

git在本地有什么东西呢?(重要!!)

工作区:写代码的地方

暂存区:打算要提交的东西,但是还没提交

本地库:实实在在存储每一个历史的版本

3.6 Git和代码托管中心 

代码托管中心的任务:维护远程库

git还有其他的代码托管中心,例如:

3.7 本地库和远程库

3.7.1 团队内部协作

3.7.2 跨团队协作 

上述的三张图分别代表:岳不群 令狐冲 东方不败。大概有个印象,之后会反复出现。

具有有关本地库和远程库的操作过程,之后的笔记会有。

4 Git 命令行操作 

4.1 本地库初始化

(进入到自己的工作区目录,每个人的不大一样!!)(老师的:e盘下/may/GitSpaceVideo/WeChat)

命令:

git init

(切换到目录->右键Git Bash Here->用linux命令到对应目录下->初始化)

在linux中以.开始的文件都是隐藏资源,直接用ll命令看不到,可以使用ls -lA命令查看。ll .git/命令查看.git文件夹下的东西。

效果:会在当前目录下生成.get目录(隐藏的)

注意:.git 目录中存放的是本地库相关的子目录和文件,不要删除,也不要胡乱修改

4.2 设置签名 (本地库初始化后要执行的)

形式

  • 用户名:tom
  • Email 地址:goodMorning@atguigu.com     #email地址不用非得和用户名一致,有时候email地址不存在都没事

作用:用email字符串区分不同开发人员的身份

辨析:这里设置的签名和登录远程库(代码托管中心的账号、密码没有任何关系)

命令(注意下面命令要换成自己的name和email信息

(a)项目级别/仓库级别:(不带参数-)仅在当前本地库范围内有效

git config user.name tom_pro

git config user.email goodMorning_pro@taku.com

    签名信息保存位置:./.git/config 文件

    使用cat .git/config命令打开这个文件

(b)系统用户级别:登录当前操作系统的用户范围

git config --global user.name tom_glb

git config --global  user.email goodMorning_glb@taku.com

信息保存位置:~/.gitconfig 文件 (家目录下c/user)

使用ls -lA|less命令查看文件,使用cat ~/.gitconfig命令打开这个文件

级别优先级的三种情况说明:

  • 1就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别的签名;
  • 2如果只有系统用户级别的签名,就以系统用户级别的签名为准;
  • 3二者都没有不允许,做一些操作时git会报错。

4.3 基本操作(查看状态/提交暂存区和本地库/历史查看) 

4.3.1 状态查看

git status   /*第一代表是那个分区的,第2是否提交3有没有可提交的文件和提示

查看工作区、暂存区状态

4.3.2 添加/撤回->暂存区

对于已经add的文件,修改后可以直接commit。命令形式为:

git add [file name]    /*提交到暂存区,并且转换换行符

这里先新建了一个good.txt文件。然后执行git add good.txt命令。

将工作区的“新建/修改”添加到暂存区

git status
//查看状态,部分输出结果如下:
//Changes to be committed:

//(use "git rm --cached ..." to unstage)

从暂存区撤回,工作区的文件还是存在的:

git rm --cached good.txt  

4.3.3 提交

在提交commit过程中,可能会进入文件的编写环境,这和安装时候选择的vim编辑器有关。命令形式为:

git commit [file name]  /*需要输入提交信息日志>写完wq(下面不需要进入vim)

以下代码是跟着老师演示的实际操作来的(不需要进入vim):

git commit good.txt

//:set nu命令会显示行号,因为安装的时候明确说过“建议使用VIM编辑器”,在第一行写入My first commit.new file good.txt,然后在最后一行按:wq,退出。

git status

//On branch master

//nothing to commit,working tree clean   //暂存区没有什么可提交的,工作目录对应的树是干净的

vim good.txt //稍微改一下这个文件,加一行UUUUU

git status

//On branch master

//Changes not staged for commit:

//(use "git add ..." to update what will be committed) //这个和第一次vim good.txt新建文件时的状态不一样,include

//(use "git checkout -- ..." to discard changes in working directory) //在工作目录中取消修改

mofified good.txt //检测到文件被修改了

//no changes added to commit(use "git add" and/or use "git commit -a") //先add再commit;或者直接commit。新建文件是(use "git add" to track)

git add good.txt

git status

//On branch master

//Changes to be committed:

//(use "git reset HEAD ..." to unstage) #//可以变成没有缓存的情况

mofified good.txt //标记变绿了

git commit -m "My second commit.modify good.txt" good.txt //这样就不用打开vim编辑器,更常用

总结命令格式为:

git commit -m "commit message" [file name]  //将暂存区的内容提交到本地库 

git restore   //撤销某个文件修改的操作

git reset HEAD file //可以把暂存区的修改撤销掉(unstage),重新放回工作区

4.3.4 查看历史记录(4种查询方法) 

第一种:

git log    //查看版本记录

为了看得清楚一些,多添加几次(三次)

当进行了很多次操作之后,查看日志时,一个屏幕根本放不下。

多屏显示控制方式:空格向下翻页 、b 向上翻页 、q 退出(超过了自动多屏)

第二种:

git log --pretty=oneline  //每个历史只显示一行(hash值和日志)

第三种:

git log --oneline   //每个历史只显示一行且显示hash的部分值

第四种:

git reflog   //显示历史只显示一行,并且显示指针(要移动到版本多少步)

HEAD@{移动到当前版本需要多少步}

4.3.5 前进后退 (3种方式) 

git在管理历史版本时其实有一个指针,指针的名字叫“HEAD”,方便移动。

本质:指针移动

第一种:基于索引值操作[推荐] 

git reset --hard [局部索引值]

//例子

git reset --hard a6ace91

第二种:使用^符号,只能后退 

git reset --hard HEAD^^  

注:一个^表示后退一步,n 个^表示后退 n 步

第三种:使用~符号,只能后退

git reset --hard HEAD~n

注:表示后退 n 步

git reset --hard HEAD~3  //表示后退3步

4.3.6 reset 命令的三个参数对比 

(查看命令帮助文档: git help reset)

--soft 参数

仅仅在本地库移动 HEAD 指针 (查看状态时绿色提示,本地库和暂存区不同步)

--mixed 参数

在本地库移动 HEAD 指针,重置暂存区

--hard 参数

在本地库移动 HEAD 指针,重置暂存区和工作区

4.3.7 删除文件并找回

前提:删除前,文件存在时的状态提交到了本地库

例子:

  • 进入的文件目录
  • rm 文件名(rm aaa.txt)删除本地文件
  • 然后提交到暂存区git add aaa.txt
  • 然后提交到本地仓库git commit -m ”delete aaa” aaa.txt (删除完成)

找回操作:

git reset --hard [指针位置] 

删除操作已经提交到本地库:指针位置指向历史记录(回到之前未删除版本)

删除操作尚未提交到本地库:指针位置使用 HEAD(git reset --hard HEAD)

4.3.8 比较文件差异

git diff [文件名]      //将工作区中的文件和暂存区进行比较

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

例子:

git diff HEAD^ apple.txt  //可以用HEAD或者版本索引值

将工作区中的文件和本地库历史记录比较,如果不带文件名则比较多个文件。

说明:记录学习笔记,如果错误欢迎指正!写文章不易,转载请联系我。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值