【玩转Git三剑客笔记】第一章 Git基础

前言:本系列笔记是基于极客时间的《玩转Git三剑客》专栏的笔记。

1.综述

Git是一种分布式的代码管理工具。

2.安装Git

git官网:Git - Installing Git
在这里插入图片描述

3.使用Git之前需要做的最小配置

我们在使用git前首先要设置git 的用户名和邮箱,这样git在版本管控的时候,就可以知道哪些变更、改动是哪个用户进行的改动,一目了然。(只有做了相关配置,git才能进行版本控制)

1.配置基本的用户名,用户邮箱

$ git config --global user.name 'your_name'
$ git config --global user.email 'youre_mail@domain.com'

2.config的三个作用域

#缺省等于local
$ git config --local  #只针对某个仓库有效,对其他仓库无效。作用域为局部
$ git config --global #global对当前用户所有仓库有效
$ git config --system #system对系统所有登录的用户都有效

3.显示config的配置,加–list

$ git config --list --local
$ git config --list --global
$ git config --list --system

在这里插入图片描述

小结

添加配置

git config [–local | --global | --system] user.name ‘Your name’
git config [–local | --global | --system] user.email ‘Your email’

查看配置

git config --list [–local | --global | --system]

区别

local:区域为本仓库
global: 当前用户的所有仓库
system: 本系统的所有用户

4.创建第一个仓库并配置local用户信息

1.创建Git仓库

两种场景:

1.把已有的项目代码纳入Git管理

$ cd 项目代码所在的文件夹
$ git init 

2.新建的项目直接用Git管理

$ cd 某个文件夹
$ git init your_project #your_project就是你要新建的项目,会在当前路径下创建与项目名称相同的文件夹
$ cd your_project

在这里插入图片描述

2.设置Git最小配置

为了区分config的local设置和global设置不同时,仓库采用哪个设置,我们这里用local进行设置。(结论:局部优先于全局)

在这里插入图片描述

3.做一次简单的提交

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EeXXUZzS-1682953511862)(C:\Users\Administrator.DESKTOP-I4A8DOF\AppData\Roaming\marktext\images\2022-04-21-23-54-53-image.png)]

5.通过几次commit来认识工作区和暂存区

在这里插入图片描述
在这里插入图片描述

1.将工作区中所有已经被git追踪的文件一起添加到暂存区

$ git add -u

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jbsv9K9z-1682954068478)(C:\Users\Administrator.DESKTOP-I4A8DOF\AppData\Roaming\marktext\images\2022-04-22-00-16-04-image.png)]

2.git log查看提交日志

$ git log
commit abe254ce11b429b6f19ff8b5cbc84e4e27de242c (HEAD -> master)
Author: Jack-song-gif <562054870@qq.com>
Date:   Fri Apr 22 00:15:45 2022 +0800

    Add refering projects

commit 675f2d69f9a0e197e7338bc7dd61bd81a6913aa2
Author: Jack-song-gif <562054870@qq.com>
Date:   Fri Apr 22 00:05:56 2022 +0800

    Add js

commit 0cbe4a5ddd935fbdc380bb51b23cc5798ca6430f
Author: Jack-song-gif <562054870@qq.com>
Date:   Fri Apr 22 00:03:49 2022 +0800

    Add style.css

commit 57a9d1467bbd12c7e3507c3d21bfdc926e83ddda
Author: Jack-song-gif <562054870@qq.com>
Date:   Thu Apr 21 23:59:07 2022 +0800

    Add index+logo

commit e2ed4a8b41dd52cb8e31d345f9b4e41e50d3c92a
Author: Jack-song-gif <562054870@qq.com>
Date:   Thu Apr 21 23:44:13 2022 +0800

    Add readme

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CnrSUnXv-1682954068480)(C:\Users\Administrator.DESKTOP-I4A8DOF\AppData\Roaming\marktext\images\2022-04-22-00-17-36-image.png)]

6.给文件重命名的简便方法

场景:给git-learning目录下的readme文件重命名

方法一:三个步骤

 mv readme readme.md
 git add readme.md
 git rm readme

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oix6CqYz-1682954068482)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220502220148701.png)]

方法二:一条指令

 git mv readme readme.md

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GI7yD0kZ-1682954068490)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220502220225217.png)]

关于大小写的问题:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o9a5lUBt-1682954068500)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220502221355125.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4FgcI773-1682954068502)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220502221448721.png)]

网友补充:

针对“零维”和“Sleeves” git mv 命令大小写敏感问题的补充实验

我使用的是Windows系统,系统的大小写是不敏感的。
core.ignorecase 默认配置是 true

基于此配置做 git mv readme Readme 操作的话,可以在 git status 看到文件名的变化。
但是,同样基于此配置,做 mv readme Readme 操作后,再使用 git status 查看文件状态,发现 status 仍为 clean 的状态。

当 core.ignorecase 配置修改为 false 时,两个操作的执行结果正好相反。

当切换到Ubuntu这种大小写敏感的系统上,不管 core.ignorecase 配置是什么,使用 git mv 和 mv 命令的结果都是一样的。

OS大小写敏感问题对 git mv 命令和 git status 命令产生了什么样的影响,想不出来可以怎么解释清楚,还希望可以有小伙伴可以继续来讨论。

总结:

直接一步修改文件名:git mv file newfile

先用mv修改,再用git管理:mv file newfile ; git add newfile;git rm file

撤销工作区和暂存区的全部修改,回退到版本库最后一次commit状态:git reset --hard

也可以指定回退到具体某一次commit:git reset --hard commitID

7.通过git log查看版本演变历史

1.git log的扩展使用

git log --oneline  #只显示commit ID和commit message,显示一行
git log -n4 #显示最近四次提交的日志
git log -n4 --oneline #组合使用
git log --oneline -n4 #组合使用
git log #默认查看的是当前分支的日志
git log --all #查看所有分支的日志,--all表示所有分支
git log --all --graph  #图形化查看版本演进历史,可以查看父子关系
git log --all --graph --oneline
git log --all --graph --oneline -n4 #n4表示显示所有分支的最近四个提交
#example
$ git log --oneline
abe254c (HEAD -> master) Add refering projects
675f2d6 Add js
0cbe4a5 Add style.css
57a9d14 Add index+logo
e2ed4a8 Add readme

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z8dF4y2B-1682954068503)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220502222722585.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w7mtjcZ2-1682954068505)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220502222906375.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-paM4mJSR-1682954068508)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220502223057254.png)]

2.创建临时分支,并在临时分支上进行修改提交

git checkout -b temp(新分支名)  commitID
或者:
git checkout -b temp master #基于master分支的最新提交新建temp临时分支

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V2lI5zKs-1682954068510)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220502224208673.png)]

git log默认查看当前分支的日志

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TioDIKxF-1682954068512)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220502224759929.png)]

git log --all 查看所有分支的日志

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pvb3TvgN-1682954068513)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220502224921287.png)]

 git log --all --graph  #图形化查看版本演进历史,可以查看父子关系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T4ltra62-1682954068516)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220502225023973.png)]

git log --all --graph --oneline

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8OHPMp2A-1682954068517)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220502225346880.png)]

git log --all --graph --oneline -n4 #n4表示显示所有分支的最近四个提交

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ir6Liah4-1682954068519)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220502225605462.png)]

3.如果想查看详细的git log的使用

git help --web log #通过浏览器查看文档

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0FqpUzuZ-1682954068521)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220502225920443.png)]

8.gitk:通过图形界面工具来查看版本历史

gitk

在这里插入图片描述

9.探秘.git目录

1.HEAD文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2vKlsgPF-1682954068525)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220502232707183.png)]

2.config文件,存储git仓库的配置信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-la1ebJtk-1682954068526)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220502233327679.png)]

修改当前仓库的用户名和邮箱

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4VWrTaT3-1682954068527)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220502233613738.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ycr8L3To-1682954068528)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220502235138004.png)]

3. refs

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0fqK5Ifz-1682954068530)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220502235523795.png)]

heads

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zOFFxV9R-1682954068531)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220502235906204.png)]

git cat-file -t 对象名 #查看对象类型
git cat-file -p 对象名 #查看对象内容

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dp5FhRFy-1682954068533)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220503000326249.png)]

tags

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1OquoH8E-1682954068534)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220503000852578.png)]

4.objects中有三种对象类型:commit,blob,tree

首先切换到objects文件夹,可以发现里面有两种文件夹一种是02类型,另一种是pack文件夹

cd objects/
ls  -al

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XrheSpH9-1682954068536)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220503001530898.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5D94cnUx-1682954068537)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220503001811244.png)]

注意:在git眼里只要文件的内容相同就是唯一的blob

10.commit、tree和blob三个对象之间的关系

一个commit就对应一个tree树,一个tree就是存储某个commit的快照,改快照就是当前commit对应的仓库内所有文件夹,文件的信息。(即tree记录在那个时间点,文件夹和文件的信息)

tree树就是文件夹,文件夹就是树

blob跟文件名无关,只要文件内容一样就是唯一的blob

网友解读:

现在我们应该明白git底层的运行流程了,当我们添加或者修改了文件并且add到Stage Area之后,首先会根据文件内容创建不同的blob,当进行提交之后马上创建一个tree组件把需要的blob组件添加进去,之后再封装到一个commit组件中完成本次提交。在将来进行reset的时候可以直接使用git reset --hard xxxxx可以恢复到某个特定的版本,在reset之后,git会根据这个commit组件的id快速的找到tree组件,然后根据tree找到blob组件,之后对仓库进行还原,整个过程都是以hash和二进制进行操作,所以git执行效率非常之高。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8DETKMva-1682954068539)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220503002652669.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ivaILNO7-1682954068540)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220503004626964.png)]

11.小练习:数一数tree的个数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U3HMOSsu-1682954068541)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220503004804480.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-96mcGhnH-1682954068543)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220503005617599.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QeD4oCwZ-1682954068545)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220503010216402.png)]

$ git cat-file -t 2d832d9044
blob
$ git cat-file -p 2d832d9044
hello,world

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dgK2AqhX-1682954068547)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220503012020257.png)]

网友总结:

没有文件也就是没有blob对象的目录是不会被git管理的,因为git要对文件进行版本管理,所以没有必要对空目录生成对象。基于这一点,readme文件的全路径是这样:[仓库根目录]/doc/readme。那么tree的数量与全路径中“/”的数量一致。

我的总结

git add操作会生成blob对象

git commit操作后才会生成tree,因为tree的作用就是为了记录commit快照。

12.分离头指针情况下的注意事项

你可以直接用git checkout commitID切换到某一个提交上,此时并没有和任何分支进行挂钩。

分离头指针的危险:

假设你基于某个提交进行了一些修改,此时你接收到紧急任务,需要fig一个bug,然后你就切换到master分支进行修改bug了,而原来基于某个提交的变更就会被git当作垃圾给丢弃。

分离头指针的好处

当你想要进行一些变更,但是只是想要实验一下看看效果,你就可以分离头指针到某个提交,然后进行修改,不满意效果就直接切换到别的分支,那些你原来基于提交的修改就会被丢弃。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6tqgRcSB-1682954068549)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220503013408063.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5POH3G4W-1682954068551)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220503013652378.png)]

将基于commit修改的变更保存到新分支

git branch <new-branch-name> 1df216a #1df216a是变更后的最新提交

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-okY1t16z-1682954068553)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220503014400610.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BYSoyCx5-1682954068555)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220503014724171.png)]

13.进一步理解HEAD和branch

1.我们通过一个场景来演示:

#新建一个fix_readme分支,并且切换到新分支
git checkout -b fix_readme fix_css

$ git checkout -b fix_readme fix_css
Switched to a new branch 'fix_readme'
$ git branch -av #查看所有分支,发现头指针指向fix_readme分支
  fix_css    1df216a Backgroud to green
* fix_readme 1df216a Backgroud to green
  master     abe254c Add refering projects
  temp       025f501 Add zhangsan
$ cat .git/HEAD
ref: refs/heads/fix_readme
#本质上HEAD还是指向某一个提交的,HEAD指向的是分支的最新提交。
$ git cat-file -t refs/heads/fix_readme 
commit

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LFyQWV78-1682954068557)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220503145235020.png)]

2.使用git diff比较两次提交的差异

 $ git diff 1df216 675f2d69f9  #根据ID比较两次提交
 $ git diff HEAD HEAD^1   #根据头指针比较当前提交与前一次提交(父提交)
 $ git diff HEAD HEAD~n   #比较当前提交和前n次提交
 #注:git diff a b 显示的差异是b-a的结果,也就是b相对a没有的用-显示,b比a多的用+显示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RsA4wSCb-1682954068559)(D:\数字媒体技术\程序员资料\笔记汇总\玩转Git三剑客笔记.assets\image-20220503144942056.png)]

扩展阅读:

git dif

repo

repo1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西里小诸葛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值