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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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