Git三剑客之Git

一、Git概述

版本管理的演变
1)集中式的版本管理(SVN)

  1. 有集中的版本管理服务器
  2. 具备文件版本管理和分支管理能力
  3. 集成效率有明显地提高
  4. 客户端必须时刻和服务器相连

2)分布式的版本管理(Git)

  1. 服务端和客户端都有完整的版本库
  2. 脱离服务端、客户端照样可以管理版本
  3. 查看历史和版本比较等多数操作,都不需要访问服务器,比集中式VCS更能提高版本管理效率
分布式的管理系统

3)GIt的优点

  • 最优的存储能力
  • 非凡的性能
  • 开源的
  • 容易做备份
  • 支持离线操作
  • 很容易定制工作流程

二、安装Git

1、Git官方文档地址:

https://git-scm.com/book/zh/v2

2、macOS 平台 Git 下载地址:

https://git-scm.com/download/mac

3、Windows 平台 Git 下载地址:

https://git-scm.com/download/win

4、Linux 平台 Git 下载地址:

https://git-scm.com/download/linux

5、检查安装结果

$ git --version ## 通过执行该命令,看git是否返回版本信息

三、使用Git之前的最小配置

  1. 配置user.name和user.email
$ git config --global user.name 'your_name'
$ git config --global user.email 'your_email@domain.com'
  1. git config命令的三个作用域
缺省等同于local
$ git config --local ## local只对某个仓库有效
$ git config --global ## global对当前用户所有仓库有效
$ git config --system ## system对系统所有登录的用户有效
  1. 查看config配置,加--list
$ git config --list     #会输出global、local、system所有的配置信息
$ git config --list --global  #仅输出global的配置信息
$ git config --list --system  #仅输出system的配置信息
$ git config --list --local    ##仅输出local的配置信息
  1. 清除config配置,加--unset
$ git config --unset --global user.name
$ git config --unset --system user.name
$ git config --unset --local user.name

四、创建第一个仓库,并创建local用户

  1. 创建Git仓库
    两种场景
  • 把已有的项目代码纳入git管理
$ cd 项目所在文件夹
$ git init
  • 新建的项目,直接使用git进行管理
$ cd 某个文件夹
$ git init your_project
$ cd your project
新建git仓库

查看新建的git仓库
  1. 向Git仓库中添加文件
$ git add file_name ## file_name表示你的文件的名字
$ git add file_name1 file_name2 file_name3 ## 添加多个文件
$ git add -u ## 保存修改和删除,但是不包括新建文件。
$ git add . ## 保存新的添加和修改,但是不包括删除
$ git add -A ## 保存所有的修改

五、通过几次commit来认识工作区和暂存区、版本历史

工作区和暂存区、版本历史

几次commit

通过git log命令来查看版本历史


git log命令

六、给文件重命名的简便方法

  1. 麻烦的方式
$ mv old_file_name new_file_name ## 第一步,修改文件名
$ git add new_file_name ## 第二步,将修改后的文件,添加到Git中
$ git rm old_file_name ## 第三步,移除掉旧的文件
  1. 简单的方式
$ git mv old_file_name new_file_name ## 通过git mv命令,直接将文
件名修改

七、通过git log查看版本演变历史

  1. 查看git log列表


    image.png
  2. 指定查看几个版本的历史


    指定查看最近两个版本的历史记录

    指定查看最近三个版本的历史记录,并以列表的形式显示

3、查看本地的分支信息


查看本地分支信息

4、新建一个临时分支,并稍作修改


image.png

查看所有分支历史版本信息


以图形化的方式查看所有分支的版本信息
总结
查看详细日志
$ git log
$ git log --graph ## 图形化显示
$ git log branch_name ## 查看branch_name分支的日志
查看简洁日志
$ git log --oneline
$ git log --oneline branch_name ## 查看branch_name分支的日志
$ git log --oneline --all
$ git log --oneline --graph
查看最近几次的日志
$ git log -n4 ## n4表示查看最近4次的日志
$ git log --oneline -n4

查看git 的命令api文档
$ git help --web log

八、gitk:通过图形界面工具来查看git历史

gitk命令


gitk图形工具

九、探秘.git文件夹

.git目录文件

  • HEAD文件
    该文件内容为当前的分支信息,切换分支的时候,该文件信息会随之改变,如下图所示


    HEAD文件
  • config文件
    存放了本地仓库的配置信息

    config文件

  • refs
    refs文件中存放了,所有分支和tag(里程碑)信息(40位的hash值),对应的是分支最新的一个commit哈希

    refs文件夹

  • objects
    objects文件夹下都是一些两位数的文件夹,里面存放一个40位hash文件,类型为tree,这个tree文件中又存放了一个blob对象,通cat-file命令查看,发现这个blob就是git管理的文件对象,如图所示是一个css文件。

    objects文件夹

十、commit、tree、blob三者之间的关系

commit就相当于当前仓库的一个快照,而一个commit也对应一棵tree(目录对应tree,文件对应blob)
tree就相当于文件夹


commit、tree、blob三者之间的关系

通过命令行来证明上面的图


image.png

十一、数一下tree的个数

image.png

答案:有两棵树(commit对应的一棵树,文件夹doc对应的一颗树),一个commit,一个blob


image.png

十二、分离头指针情况下的注意事项

分离头指针指的是,HEAD当前没有指向任何一个分支,而是某一个历史commit上。
1、分离头指针状态下,开发的代码,需要关联到分支,如果不关联到分支,在分离头指针状态下,切换到分支上时,分离头指针状态下开发的代码,将会被git清除


分离头指针
分离头指针的状态下,切换到master分支

十三、进一步理解HEAD和branch

# 基于新分支创建一个老的分支,此时git会自动切换到新建的分支上
$ git checkout -b newbranch oldbranch
# git diff命令可以这样比较两个commit(快照)的之间的差异
$ git diff d3af93fba4f0a  990c6561e69fee
# 使用git diff命令比较版本,也可以使用HEAD来指代当前版本与之前n个版本之间的区别
$ git diff HEAD HEAD~n

十四、删除无用的分支

git branch -d 分子名称
当-d无法删除,并且确认分支无用的情况下,使用-D进行强制删除


删除分支

十五、怎样修改最新commit的message

image.png

十六、怎样修改老旧commit的message

!怎样修改老旧commit的message](https://upload-images.jianshu.io/upload_images/4038260-6ec0f55a8ef04bcd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
想要修改modify index and style这个commit message,则需要使用rebase变基操作,这里要用到这个commit的父亲commit,此时会弹出一个交互窗口,使用r命令来修改message

rebase

修改保存退出,又会弹出一个交互窗口,在这个交互窗口中修改commit messge,保存退出
image.png

修改成功

十七、怎样将连续的commit合并成为一个

git rebase -i 父亲commit的hash
在交互窗口中,将要合并的commit 使用squash(压缩命令进行合并),保存退出


rebase

输入合并的message保存退出


image.png

十八、怎样将间隔的commit合并成为一个

image.png

在交互窗口中将要合并的两个commit放到一起,使用s命令进行合并,保存退出
此时会有消息提示
git status查看状态
git rebase continue命令输入合并后的commit messge后,再保存退出


合并成功

十九、怎么比较暂存区和HEAD所含文件的差异

git diff --cached-------比较暂存区和HEAD的差别


git diff --cached

二十、怎么比较工作区和暂存区的差异

git diff 比较工作区暂存区所有的文件差异

git diff

git diff -- filepath(可以指定多个文件)


git diff -- filepath

二十一、如何让暂存区恢复成HEAD的版本

git reset HEAD--------取消暂存区的修改,恢复到HEAD版本


git reset HEAD

二十二、如何让工作区恢复成暂存区的版本


修改暂存区使用git checkout命令,修改暂存区则使用git reset命令


二十三、怎么取消暂存区部分文件的修改

取消暂存区中index.html的修改


二十四、消除最近的几次提交

回退到以前的某个commit

二十五、看看不同commit的指定文件的差异

二十六、正确删除文件看的方法

二十七、开发中紧急加塞了紧急任务怎么处理

正常开发需求,修改了index.html和js文件



此时临时加塞了一个需求,比如项目bug修改,这个时候就需要把上面需求开发的代码暂存起来,用到命令git stash



可以看到之前两个文件的修改都被暂存到stash中了,然后我们就能开发我们的新需求

新需求开发完毕,提交版本库后,我们回过头来取出stash中暂存的两个文件修改



发现我们之前开发的代码被恢复了回来

二十八、如何指定不需要git管理的文件

通过添加名为.gitignore的文件,来指定

二十九、如何将git仓库备份到本地

image.png

image.png

image.png

新建一个文件夹git-backup,克隆远程仓库,可以看到远程仓库有两个分支master,temp
然后再远程仓库git_learning中添加备份仓库地址,新建一个pyy的分支,并push到备份仓库



然后查看备份仓库中的分支信息,发现也更新了pyy的分支


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

推荐阅读更多精彩内容

  • 简介 什么是git? git是一款开源的分布式版本控制工具 在世界上所有的分布式版本控制工具中,git是最快、最简...
    JonesCxy阅读 1,015评论 0 3
  • 第1章 Shell和vi 1.1什么是shell 在计算机科学中,Shell俗称壳,用来区别于Kernel(核),...
    福尔摩鸡阅读 898评论 0 1
  • Home 关于Gitee Gitee 是开源中国社区[http://www.oschina.net]团队基于开源项...
    奋拓达阅读 2,253评论 0 3
  • 一、Git综述 1、VCS出现前的状况 用目录拷贝区别不同版本 公共文件容易被覆盖 成员沟通成本很高,代码集成效率...
    开心的锣鼓阅读 1,852评论 0 1
  • 廖老师的教程不错:http://www.liaoxuefeng.com/wiki/0013739516305929...
    my__life阅读 261评论 0 0